【问题标题】:spl autoloading: Class is not found – namespace issue?spl 自动加载:找不到类 – 命名空间问题?
【发布时间】:2014-12-07 10:25:59
【问题描述】:

我刚刚开始使用 PHP 自动加载。我实际上认为我已经掌握了基础知识,但不知何故它仍然无法正常工作。

我得到了以下目录结构:

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

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

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

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

【问题讨论】:

    标签: php autoload spl-autoload-register spl-autoloader


    【解决方案1】:
    spl_autoload_extensions('.php');
    spl_autoload_register();
    

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

    【讨论】:

    • 好吧,我正在运行 5.6.99 和 hhvm 3.3.0 ;-)
    【解决方案2】:

    斯文,

    我刚刚回答了另一个关于 spl_autoload 的问题,试试我的例子 click here

    希望对你有帮助!

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

    【讨论】:

      猜你喜欢
      • 2013-07-19
      • 2015-08-23
      • 2016-05-18
      • 2013-06-01
      • 2017-04-05
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多