PHP:使用spl_autoload_register了解包含范围

时间:2016-06-17 15:33:36

标签: php scope include spl-autoload-register

我正在尝试自动加载类,但我受范围的阻碍。正在加载类,但我正在使用它超出范围。这是代码,以进一步解释我正在尝试做什么。

AutoLoader.php

<?php
class AutoLoader {
    private $namespace;

    public function __construct($namespace) {
        $this->namespace = $namespace;

        spl_autoload_register(array($this, 'ClassLoader'));
    }

    private function ClassLoader($class) {
        $class = "classes/{$this->namespace}/{$class}.php";
        print("Loading class: {$class}");
        include "{$class}";
    }
}
?>

的script.php

<?php
    ini_set("display_errors", 1);
    $loader = new AutoLoader("myspace");

    $MyClassObj = new MyClass();
    $result = $MyClassObj->MyClassFun();
?>

因此,当它归结为script.php时,我得到了打印它正在加载类,我没有得到任何无法找到文件的错误。所以看起来它正在加载,但是当我使用该类创建一个新对象时,它告诉我它无法找到该类。所以我正在加载包含范围。

我将AutoLoader包含在一个单独的文件中,因此我可以将其加载到多个文件中。我可以完成这项工作,还是必须将AutoLoader作为script.php的一部分而不是单独的?

编辑:包含错误,将错误显示添加到script.php。

Loading class: classes/myspace/MyClass.php
Fatal error: Class 'MyClass' not found in /usr/local/apache2/htdocs/scripts/script.php on line 5

编辑:包括MyClass.php和目录结构

MyClass.php

<?php
    class MyClass {
        public function MyClassFun() {
            $var = "hello world";
            return $var;
        }
    }
?>

目录结构

htdocs/scripts/script.php
htdocs/classes/myspace/MyClass.php
htdocs/AutoLoader.php

如果我将课程更改为MyClasse (拼写错误),则会因为无法找到该文件而导致包含错误。所以使用正确的MyClass我只能假设它找到了文件,因为它没有产生错误。所以包含看起来不错,但它仍然不会使用它。

现在,我想的更多,很奇怪。当我去使用该类时,包含仅在第5行发生。 ClassLoader正在调用spl_auto_register来搜索该类。它正在寻找并包括课程。然而同样的line 5却未能真正使用它。

我想我不明白这种脱节。 Line 5正在调用ClassLoader,但在加载后无法真正找到该类。

0 个答案:

没有答案