3

在浏览了网络之后,我设法构建了一个有效的 SPL_Autoload 并在其中使用了命名空间。它确实有效,但与我正在查看的所有示例和文档相比,它对我来说也有点奇怪。我是否在使用一切并正确理解它?

$class 查找一个名为 subdir\timer 的类,因为它找不到它,所以它转到 SPL_autoload

$class = new subdir\timer;

SPL_autoload 假设在文件夹“subdir”中查找文件“timer”以 .php 或 .class.php 结尾的文件(感谢 SPL_extensions)

现在我不太确定寄存器和 SPL_autoload 中发生了什么。当我尝试自行注册时,它没有使用 _extensions,但是当我添加 spl_autoload 时它工作正常。唯一的问题是我从未在任何示例中看到过这样的设置,所以我真的质疑这部分

spl_autoload_extensions(".php,.class.php");
spl_autoload_register(function($class){
    spl_autoload("$class");
});

你觉得有什么可以改进的或者我做错了什么吗?

4

1 回答 1

3

我已经对其进行了测试,它对我有用:

set_include_path(__DIR__.'PATH_TO_LIB');
spl_autoload_extensions('.php,.class.php');
spl_autoload_register();

所以你设置了正确的include_path?

此外,对于命名空间和类名,还有一个称为 PSR-0 的标准。

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

他们还有一个更大但也更灵活的SplClassLoader,虽然我想知道你只能设置一个文件扩展名。好吧,但是搜索一下PSR-0 autoloader,你会发现更多的实现。顺便说一句,还有值得了解的标准PSR-1PSR-2 。

于 2013-07-20T22:45:15.853 回答