问题标签 [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.
php - 在 PHP 中自动加载导入的命名空间
我正在尝试编写一个自动加载器来支持导入的命名空间。我的目录结构如下所示(列出了类文件):
我所有的控制器都包含 config.php 文件,其中包含我的自动加载器代码:
现在这适用于所有基本情况,但是当您开始导入命名空间时它会失败。例如:
传递给自动加载器函数的完全限定类名是MathModule\Cat
,这是一个合理的假设。
有没有办法让自动加载器与导入的命名空间一起工作?我猜必须有一种方法,因为我的自动加载器与 PSR-0 的自动加载器非常相似。
php - 如何在没有 debug_backtrace() 的情况下自动加载类
我编写了一个小系统,它会自动从需要该类的文件所在的同一目录加载类。
现在我可以通过两种方式包含类:
- 通过 spl_autoload_register():
$test_obj = new Base_class;
或者Test_class extends Base_class
- 通过 load_class():
load_class('Base_class');
在这两种情况下,Base_class
都应该包含在需要它的同一目录中。
例如
文件/application/models/Extendend_class.php
应该自动包含/application/models/Base_class.php
有人说(我非常同意他们)在生产代码中使用 debug_backtrace() 是一种糟糕的做法,所以问题是:有没有办法在没有该功能的情况下实现类似的行为?
提前致谢。
PS
这是我正在处理的实际脚本。
更新
我按照建议尝试了一个空的 try - catch 并且它有效!它可能不是“最干净”的解决方案,但它有效......
更新 2
自动加载类的最佳方式可能是通过命名空间。
这是一个示例实现。
php - 文件目录和自动加载问题 PHP MVC
我正在构建一个 MVC PHP 框架,并且在自动加载我的类时遇到了一些问题,我认为这可能与我的文件结构有关。
首先,这是我的文件结构:
我在 Xampp 本地服务器环境中测试开发,所以这就是我拥有私有和公用文件夹的原因。最终在实时服务器上,私有文件夹将位于服务器根目录中,而公用文件夹将位于 public_html 目录中。
我的文件结构看起来对吗?在私有的前端文件夹中,我将所有不同的模块放在目录中,这些模块又具有控制器、模型、视图文件,这些文件包含每个模块的必要文件。
到目前为止,我已经创建了这个自动加载器:
这对于 lib->core 目录中的类非常有效,但是当我尝试实例化一个新的测试类时,我得到了关于在 lib->core 文件中找不到 test.class.php 文件的各种错误,它显然不是,但我认为自动加载器函数会在我自己在“autoloader_app”函数中定义的路径中查找。
有趣的是,即使我得到了所有这些错误,我在测试函数 say_hello() 中回显的字符串确实在错误之后得到回显。
所以简而言之,没有根据错误找到文件,但这是因为我可以看到我制作的类函数打印的回声。
任何想法为什么?
还有我的前端模块文件结构,这是否会使自动加载变得非常困难,因为每个模块都需要不同的自动加载功能,然后是其中的每个控制器/模型/视图文件?我需要为每个模块提供单独的自动加载功能吗?如果不是,我会怎么做?
谢谢汤姆
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自动加载功能正在尝试加载亚马逊类并导致错误。
如何让亚马逊使用正确的自动加载功能?
php - 基于 OOP 的配置文件
我的应用程序有一个配置文件,但我无法传递对象,因为我需要它可用于我的主索引页面和父控制器。
目前我必须在我制作的每个控制器中将它作为 __Construct 函数的参数传递,这似乎不是最好的方法。
索引.php
我的配置文件:
还有我的主控制器类,我需要从以下位置访问配置对象:
什么是实现我想要的简洁明了的方法,基本上是有一个集中的配置文件,我的主索引文件和父控制器都可以使用其参数?
php - spl 自动加载函数在服务器上返回错误
大家好,我正在尝试使用 spl 自动加载功能,它可以在我的本地服务器上完美运行,但是当我在线时它会返回错误。我解决了它的服务器问题,但我需要有人指导我看哪种方式我有下面的代码
和错误
解析错误:语法错误,意外的 T_FUNCTION,在第 22 行的 /home/www/ftwrkdesign.com 中需要 ')'
注意:classes 是一个文件夹,它的绝对路径返回相同的错误 php server version is 5.5.29
php - Smarty_Internal_TemplateCompilerBase 未找到
作曲家.json:
索引.php:
如果我在浏览器中打开它,我会得到
致命错误:在第 XX 行的 //smarty-example/vendor/smarty/smarty/distribution/libs/sysplugins/smarty_internal_smartytemplatecompiler.php 中找不到类“Smarty_Internal_TemplateCompilerBase”
文件在那里。它有内容。它对于 PHP 等是可访问/可读的。
我究竟做错了什么?什么不见了?
php - spl_autoloader:限制范围
如果我正确理解了SPL Autoloader的行为,它会在“全局范围”中起作用,对吗?如果我们有,比如说,这段代码:
...它适用于应用程序的其余部分,或者如果挂钩到 Wordpress 操作,从挂钩开始,对吗?
在我看来,这不是很方便,特别是如果您在较大框架(例如 Wordpress)的框架中工作。有没有办法,如何通过以下方式将 SPL Autoload 的范围限制在特定的上下文中:
- 以不同的方式定义 SPL Autoload?
- 在函数中有一些特定的东西(例如
return false
在名称没有多少某种模式的类上)? - 更聪明的东西?
我知道,我可以添加一些条件语句来autoload()
避免冲突和错误,但这似乎不是很有效。
谢谢!是的,我很可能只是忽略了一些东西。
编辑
通过命名空间模拟目录结构:在 Wordpress 中实际上是不可能的,是吗?如果你追求的是某种沟通和逻辑结构,比如说,必须使用的插件和主题。(@RoyalBg)
找不到文件:如何确定什么时候找不到文件“可以”,什么时候不可以?通过函数的逻辑?在我看来,缩小自动加载器的范围将是更优雅的解决方案。(@乔恩,@马克贝克)
但是,如果我很好地理解了您的评论,SPL Autoloader 在默认情况下真正适用于“全局”。
php - 使用 spl_autoload_register 的 PHP 自定义自动加载功能不会为继承的类触发
不知道我在这里做错了什么,希望有人能提供帮助。
我构建了以下类,目的是检测何时未包含请求的类以便可以包含它。我还希望它包含任何未包含的继承类。
调用尚未包含的类时,注册的 onAutoload 函数会按预期触发。
但是,如果调用一个继承另一个未包含的类的类,则注册的 onAutoload 函数不会触发,这主要是我想要做的。
我使用默认的 __autoload($class) 对此进行了测试,它会根据需要触发继承的类。
任何帮助,将不胜感激。已经包含了我在下面尝试做的事情以及我遇到的问题的简化示例。
在 Autoload.php 文件中
根据需要创建和注册的自动加载类
现在在以下示例中,按预期触发了 onAutoload。
但是在下面的例子中。假设 ChildClass 包含但 BaseClass 不包含, onAutoload 不会触发。
基类.php
ChildClass.php
我使用 __autoload() 函数而不是我的自定义类对此进行了测试,它按预期触发。
提前感谢大家
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.