带有命名空间类的__autoload会为找不到的文件提供致命错误

时间:2013-06-13 12:10:51

标签: php class oop namespaces autoload

我正在浏览__autoload提供的PHP功能。

然而,这是index.php我有: -

define('app_path', realpath('../'));

$paths = array(
        app_path, get_include_path());
set_include_path(implode(PATH_SEPARATOR, $paths));

function __autoload($classname)
{
    $filename = str_replace('\\', '/', $classname.'.php');
    require_once $filename;
}

use \engine\controllers as Controllers;

$data = new Controllers\base(); // This one is line no. 25 (Here is error)
echo $data->mind('Hi');

这个作为我的base.php: -

 namespace controllers;
 class base {
    public function __construct() {
        echo __CLASS__ . '<br/>';
        echo __NAMESPACE__;
    }

    public function mind($myname)
    {
        echo $myname;
    }
 }

并抛出此错误:

enter image description here

我的目录结构如下:

app -> engine -> controller -> base.php

app -> index.php

我不确定发生了什么错误。我正在学习如何使用namespace__autoload

我也试过spl_autoload_register但没有成功。请建议。

修改:1

另外,如果我想用spl_autoload_register替换它,可以实现它。

1 个答案:

答案 0 :(得分:1)

不确定,但值得一试:

在base.php中,更改为第1行的namespace engine\controllers;

在index.php中,在第23行更改为use engine\controllers as Controllers;(删除前导反斜杠)。