问题标签 [spl-autoload-register]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
289 浏览

php - spl_autoload_register 的不同行为 b/n online 和 localhost

在此处输入图像描述

我有以下目录结构,我将所有类都放在里面classes/,如下所示,我有一个header.php既调用所有文件,又具有所有文件共享的其他重要设置。

现在,如果我使用spl_autoload_register()这种方式:

内部inc/header.php文件并header.php从我的index文件中调用它,然后它在我的本地主机上工作正常,但是当我将所有脚本按原样上传到实时主机时,我会收到类似的错误。

Line 9是个spl_autoload_register()

我不明白,这怎么会发生,希望任何人都知道。

谢谢

0 投票
2 回答
204 浏览

php - PHP spl_autoload:如何确定自动加载函数请求者

spl_autoload_register 注册的函数有没有办法知道调用它的源文件/类/方法?我希望能够在找不到类时输出有用的错误,以便我知道需要更新哪个源文件。例如:

0 投票
1 回答
975 浏览

php - SPL 自动加载和扩展抽象类

我在一个名为 /classes 的目录中保留了一个抽象类定义。它看起来像这样:

在 /controllers/ 目录中(它们共享相同的父文件夹)我有我的特定控制器类文件。例如,

}

我在我的配置脚本中使用了两个spl_autoload_register()调用来确保在需要类时找到两个目录 - 但是当我尝试从我的 router.class.php 文件(位于 /classes/ 目录中)实例化 indexController 时,我得到以下错误:

它正在识别线:$this->controller = new indexController($this->registry);作为罪魁祸首。

__construct 是受保护的,但 indexController 应该从 baseController 继承,因此,由于 __construct 方法没有被重新定义,它应该调用父类的构造函数。或者我是这么想的。

到底他妈发生了什么?

0 投票
2 回答
37340 浏览

php - 如何在 PHP 中将 spl_autoload_register 用于多个目录?

我实际上是在尝试为自己创建一个 MVC 框架,但是我在使用 Autoload 时遇到了麻烦。其实这不是问题,但是我想问问各位大神,spl_autoload_register在不同目录的情况下,他们是如何使用该功能的。

假设我们有以下目录:

每个文件夹包含不同的类,例如:

您会注意到,在不同的目录中可能会发现一些具有相同名称的文件名。好的,这就是我到目前为止所尝试的:

它运行良好,但我确信还有另一种方法可以让一切变得更简单。谁能建议我如何使这段代码更好或更简单/大师在这种情况下使用什么?

0 投票
2 回答
324 浏览

php - spl_autoload_register 尝试加载具有依赖关系的类

spl_autoload_register 有多聪明?它是否知道在尝试包含之前“向前看”其他文件中的类定义?

当我运行我的 index.php 页面时,我看到了致命错误:第 4 行的 /var/www/php/classes/input/date.php 中找不到 Class 'input\input'

index.php 运行以下内容(在此块之后,它从其中一个类创建一个对象,如果我取消注释这一行,一切正常)

我的语法错了吗?spl_autoload_register 应该以这种方式运行吗?这些文件夹中的许多其他文件相互依赖,自动加载器似乎“弄清楚了”。我不知道为什么它突然特别挂在“输入”类上

0 投票
2 回答
402 浏览

php - PHP __autoload() 与命名空间

在命名空间 Think\ 下我创建了上面的注册函数,当我尝试使用像 Storeage 类这样尚未包含的类时,php 会假设将 Storeage 作为变量传递给函数 Think\Think::autoload,但它实际上是通过 Think\存储作为变量,为什么它会在自动加载中添加额外的 Think\ 而不仅仅是存储?

这是否意味着自动加载只会搜索在创建自动加载函数的同一命名空间下声明的类?

0 投票
0 回答
688 浏览

php - Spl_autoload_register 无法打开流

这是服务器/Init.php:

问题似乎在于试图包含类文件夹中的 Utils.php。这些是错误:

如果有帮助,这是 Server/Classes/Utils.php:

我做错了什么,我该如何解决?

0 投票
1 回答
144 浏览

php - 使用命名空间和全局类

我怀疑我在这里遇到的主要问题是我对该函数的实际情况缺乏了解。spl_autoload_register()

基本上我正在尝试创建一个新网站并尝试使用比以前更好的系统(以前的系统没有类,没有结构,实际上什么都没有)。

我正在使用 Linux 机器来写这个。

我的结构是:

等等。

我可以使用我从中调用lib的文件将任何这些类文件包含在结构中。但是,当我尝试在.toolset.inc.phpindex.phphandler.php

工具集.inc.php:

索引.php:

/lib/database/handler.php(简化版,实际上我阅读了连接详细信息等):

虽然我可以让处理程序文件包含在上述toolset.inc.php文件中,但我无法让 PDO 在其中工作。我已经搜索了几个小时的论坛、StackOverflow 和教程,但找不到我正在寻找的信息。

一些帖子和网站说我需要通过使用use \PDO$this->connection = new \PDO(...)在这种情况下都不能将 PDO 声明为绝对值。

我不知道为什么,我几乎完全相信这是因为我误解了一些东西,或者我错过了一些非常明显的东西。谁能解释为什么不能以这种方式包含 PDO,以及我需要做些什么才能根据需要将其包含在内?

非常感谢

编辑:-错误确实取决于我尝试的解决方案建议,但一个例子是:

虽然我知道这表示它正在寻找文件夹PDO.php中的lib文件,但这是在使用它调用它时,use \PDO;或者$test = = new \PDO(...)显然应该强制它使用 PHP 类而不是我指定目录中的一个(lib

0 投票
1 回答
51 浏览

php - spl_autoload_reqister 类未加载

我有一个看起来像的文件夹结构

我的Includes.php

我的someClass.php

并且test.php

当我运行时,test.php我在 .../Scheduled/test.php 上找不到 someClass

spl 是否适用于 someClass.php 之类的扩展类,还是我需要包含要扩展的类?

为什么它不会找到someClass.php

谢谢

0 投票
2 回答
14392 浏览

php - PHP 命名空间和 spl_autoload_register

我让 spl_autoload_register 工作正常,但后来我决定添加一些命名空间以引入 PSR2 合规性,但似乎无法让它工作。

目录结构:

每节课开始:

索引.php:

此产品错误Fatal error: Class 'Class1' not found in /var/www/myApp/index.php on line X

我的第一个想法是我的实例化需要使用命名空间,所以我改为index.php

但是,然后我得到 Warning: include(classes/Foo\Class1.class.php): failed to open stream: No such file or directory in /var/www/myApp/index.php on line 6

如果我做手册包括一切正常,include 'classes/Class1.class.php';依此类推。