0

我只是被 PHP 自动加载弄湿了。我实际上认为我已经掌握了基础知识,但不知何故它仍然无法正常工作。

我得到以下目录结构:

myLib
    -bootstrap.php
    -sven
        -project
            project.php

bootstrap.php是使用 lib 时将包含的文件。在这个文件中,我只有以下代码:

spl_autoload_extensions('.php');
spl_autoload_register();

$var = new \sven\project\project();
$var->init();

并在project.php

namespace sven\project;

class project {
    public function init() {
        echo 'It works!';
    }
}

使用自动加载器的方式,据我了解,核心 PHP 自动加载器应该将命名空间转换为目录,然后查找包含该类的 php。

不是显示“It works!”,而是抛出一个致命错误。不幸的是,我不能确切地知道那个错误是什么,因为 CMS 只通知我有一个致命错误。
但是对于这样一个简单的结构,我相信这个错误是非常基本的,并且对于知道它是如何工作的人来说很容易找到。

这个例子我哪里出了问题——我是否正确地描述了自动加载器在这个设置中应该如何工作,还是有误解?

编辑:终于运行了错误日志:

Fatal error: Class undefined: sven\\project\\project\\project\\project in /xxx/bootstrap.php on line 36

这显然看起来不对,但如何改变呢?为什么有两个反斜杠?

4

2 回答 2

0
spl_autoload_extensions('.php');
spl_autoload_register();

此代码仅适用于 PHP 5.3 及更高版本。

于 2014-10-12T21:48:19.217 回答
0

斯文,

我刚刚回答了另一个关于 spl_autoload 的问题,试试我的例子点击这里

我希望它有帮助!

PS:也不要只是自动加载路径上的所有 .php 文件,这可能很危险!

于 2015-05-28T18:29:10.667 回答