问题标签 [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 回答
106 浏览

php - 在 PHP 中自动加载导入的命名空间

这里提出的问题非常相似。

我正在尝试编写一个自动加载器来支持导入的命名空间。我的目录结构如下所示(列出了类文件):

我所有的控制器都包含 config.php 文件,其中包含我的自动加载器代码:

现在这适用于所有基本情况,但是当您开始导入命名空间时它会失败。例如:

传递给自动加载器函数的完全限定类名是MathModule\Cat,这是一个合理的假设。

有没有办法让自动加载器与导入的命名空间一起工作?我猜必须有一种方法,因为我的自动加载器与 PSR-0 的自动加载器非常相似。

0 投票
1 回答
223 浏览

php - 如何在没有 debug_backtrace() 的情况下自动加载类

我编写了一个小系统,它会自动从需要该类的文件所在的同一目录加载类。

现在我可以通过两种方式包含类:

  1. 通过 spl_autoload_register():
    • $test_obj = new Base_class;或者Test_class extends Base_class
  2. 通过 load_class():
    • load_class('Base_class');

在这两种情况下,Base_class都应该包含在需要它的同一目录中。

例如

文件/application/models/Extendend_class.php

应该自动包含/application/models/Base_class.php

有人说(我非常同意他们)在生产代码中使用 debug_backtrace() 是一种糟糕的做法,所以问题是:有没有办法在没有该功能的情况下实现类似的行为?

提前致谢。

PS
是我正在处理的实际脚本。

更新

我按照建议尝试了一个空的 try - catch 并且它有效!它可能不是“最干净”的解决方案,但它有效......

更新 2

自动加载类的最佳方式可能是通过命名空间。
是一个示例实现。

0 投票
1 回答
3337 浏览

php - 文件目录和自动加载问题 PHP MVC

我正在构建一个 MVC PHP 框架,并且在自动加载我的类时遇到了一些问题,我认为这可能与我的文件结构有关。

首先,这是我的文件结构:

在此处输入图像描述

我在 Xampp 本地服务器环境中测试开发,所以这就是我拥有私有和公用文件夹的原因。最终在实时服务器上,私有文件夹将位于服务器根目录中,而公用文件夹将位于 public_html 目录中。

我的文件结构看起来对吗?在私有的前端文件夹中,我将所有不同的模块放在目录中,这些模块又具有控制器、模型、视图文件,这些文件包含每个模块的必要文件。

到目前为止,我已经创建了这个自动加载器:

这对于 lib->core 目录中的类非常有效,但是当我尝试实例化一个新的测试类时,我得到了关于在 lib->core 文件中找不到 test.class.php 文件的各种错误,它显然不是,但我认为自动加载器函数会在我自己在“autoloader_app”函数中定义的路径中查找。

有趣的是,即使我得到了所有这些错误,我在测试函数 say_hello() 中回显的字符串确实在错误之后得到回显。

所以简而言之,没有根据错误找到文件,但这是因为我可以看到我制作的类函数打印的回声。

任何想法为什么?

还有我的前端模块文件结构,这是否会使自动加载变得非常困难,因为每个模块都需要不同的自动加载功能,然后是其中的每个控制器/模型/视图文件?我需要为每个模块提供单独的自动加载功能吗?如果不是,我会怎么做?

谢谢汤姆

0 投票
2 回答
392 浏览

php - 无法加载亚马逊 php sdk 和蓬勃发展的自动加载器 s3client

我正在尝试使用 php 5.3.3 将文件上传到 s3。我正在使用 Amazon PHP sdk 并使用自动加载器。问题是 AWS 的自动加载器没有正确加载类,我们在加载 S3 时遇到异常。我们的服务器结构如下所示:

->public(www 文档根目录)

->库

->->aws

因此,我们的上传代码位于 /public/ 中,而我们的 AWS 库位于 /lib/aws/ 中,因此为了从 public 到 lib,我们执行 /../lib/aws/。

以下是启动亚马逊上传的公用文件夹中的 upload.php 代码:

它成功地工作并打印了 echo 'creating...' 输出,然后我们得到一个错误。

这是异常的样子:

我们正在使用最新版本的 AWS: https ://github.com/aws/aws-sdk-php

我们正在使用 PHP 5.3.3 和繁荣库:http: //flourishlib.com/

这也有一个像这样的繁荣库自动加载功能:

我认为发生的事情是flurishlib自动加载功能正在尝试加载亚马逊类并导致错误。

如何让亚马逊使用正确的自动加载功能?

0 投票
1 回答
288 浏览

php - 基于 OOP 的配置文件

我的应用程序有一个配置文件,但我无法传递对象,因为我需要它可用于我的主索引页面和父控制器。

目前我必须在我制作的每个控制器中将它作为 __Construct 函数的参数传递,这似乎不是最好的方法。

索引.php

我的配置文件:

还有我的主控制器类,我需要从以下位置访问配置对象:

什么是实现我想要的简洁明了的方法,基本上是有一个集中的配置文件,我的主索引文件和父控制器都可以使用其参数?

0 投票
2 回答
966 浏览

php - spl 自动加载函数在服务器上返回错误

大家好,我正在尝试使用 spl 自动加载功能,它可以在我的本地服务器上完美运行,但是当我在线时它会返回错误。我解决了它的服务器问题,但我需要有人指导我看哪种方式我有下面的代码

和错误

解析错误:语法错误,意外的 T_FUNCTION,在第 22 行的 /home/www/ftwrkdesign.com 中需要 ')'

注意:classes 是一个文件夹,它的绝对路径返回相同的错误 php server version is 5.5.29

0 投票
1 回答
1307 浏览

php - Smarty_Internal_TemplateCompilerBase 未找到

作曲家.json:

索引.php:

如果我在浏览器中打开它,我会得到

致命错误:在第 XX 行的 //smarty-example/vendor/smarty/smarty/distribution/libs/sysplugins/smarty_internal_smartytemplatecompiler.php 中找不到类“Smarty_Internal_TemplateCompilerBase”

文件在那里。它有内容。它对于 PHP 等是可访问/可读的。

我究竟做错了什么?什么不见​​了?

0 投票
1 回答
426 浏览

php - spl_autoloader:限制范围

如果我正确理解了SPL Autoloader的行为,它会在“全局范围”中起作用,对吗?如果我们有,比如说,这段代码:

...它适用于应用程序的其余部分,或者如果挂钩到 Wordpress 操作,从挂钩开始,对吗?

在我看来,这不是很方便,特别是如果您在较大框架(例如 Wordpress)的框架中工作。有没有办法,如何通过以下方式将 SPL Autoload 的范围限制在特定的上下文中:

  1. 以不同的方式定义 SPL Autoload?
  2. 在函数中有一些特定的东西(例如return false在名称没有多少某种模式的类上)?
  3. 更聪明的东西?

我知道,我可以添加一些条件语句来autoload()避免冲突和错误,但这似乎不是很有效。

谢谢!是的,我很可能只是忽略了一些东西。

编辑

通过命名空间模拟目录结构:在 Wordpress 中实际上是不可能的,是吗?如果你追求的是某种沟通和逻辑结构,比如说,必须使用的插件主题。(@RoyalBg)

找不到文件:如何确定什么时候找不到文件“可以”,什么时候不可以?通过函数的逻辑?在我看来,缩小自动加载器的范围将是更优雅的解决方案。(@乔恩,@马克贝克)

但是,如果我很好地理解了您的评论,SPL Autoloader 在默认情况下真正适用于“全局”。

0 投票
1 回答
404 浏览

php - 使用 spl_autoload_register 的 PHP 自定义自动加载功能不会为继承的类触发

不知道我在这里做错了什么,希望有人能提供帮助。

我构建了以下类,目的是检测何时未包含请求的类以便可以包含它。我还希望它包含任何未包含的继承类。

调用尚未包含的类时,注册的 onAutoload 函数会按预期触发。

但是,如果调用一个继承另一个未包含的类的类,则注册的 onAutoload 函数不会触发,这主要是我想要做的。

我使用默认的 __autoload($class) 对此进行了测试,它会根据需要触发继承的类。

任何帮助,将不胜感激。已经包含了我在下面尝试做的事情以及我遇到的问题的简化示例。

在 Autoload.php 文件中

根据需要创建和注册的自动加载类

现在在以下示例中,按预期触发了 onAutoload。

但是在下面的例子中。假设 ChildClass 包含但 BaseClass 不包含, onAutoload 不会触发。

基类.php

ChildClass.php

我使用 __autoload() 函数而不是我的自定义类对此进行了测试,它按预期触发。

提前感谢大家

0 投票
0 回答
92 浏览

php - PHP E_STRICT causes blank white screen

I am running PHP 5.5.11. In my php.ini I have

My code uses spl_autoload_register() to register an autoloader. When I load a page I get a blank white page. I get an error in the log that Foo can not be found. Foo is defined in my autoloader. Here is the basic structure:

index.inc calls a method on A. That method calls a method on B. B extends C. C uses a class constant of Foo ( Foo::LEVEL ). It seems that it is the parsing of the class constant that is causing the error. I can fix this if I go ahead and load Foo at the top of index.inc by calling:

I can also get rid of the issue by changing my php.ini to:

The fatal I am getting is not a strict mode error. I don't understand the impact that E_STRICT is having on the processing of my code.