PHP:了解spl_autoload_寄存器的include作用域

PHP:了解spl_autoload_寄存器的include作用域,php,scope,include,spl-autoload-register,Php,Scope,Include,Spl Autoload Register,我正在尝试自动加载类,但范围限制了我。该类正在加载,但我使用它超出范围。下面是进一步解释我要做什么的代码 AutoLoader.php <?php class AutoLoader { private $namespace; public function __construct($namespace) { $this->namespace = $namespace; spl_autoload_register(array($thi

我正在尝试自动加载类,但范围限制了我。该类正在加载,但我使用它超出范围。下面是进一步解释我要做什么的代码

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}";
    }
}
?>
<?php
    ini_set("display_errors", 1);
    $loader = new AutoLoader("myspace");

    $MyClassObj = new MyClass();
    $result = $MyClassObj->MyClassFun();
?>
<?php
    class MyClass {
        public function MyClassFun() {
            $var = "hello world";
            return $var;
        }
    }
?>
编辑:包括MyClass.php和目录结构

MyClass.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}";
    }
}
?>
<?php
    ini_set("display_errors", 1);
    $loader = new AutoLoader("myspace");

    $MyClassObj = new MyClass();
    $result = $MyClassObj->MyClassFun();
?>
<?php
    class MyClass {
        public function MyClassFun() {
            $var = "hello world";
            return $var;
        }
    }
?>
如果我将类更改为
MyClasse
(拼写错误),它将在include上出错,因为它找不到文件。因此,使用适当的
MyClass
我只能假设它正在查找文件,因为它没有产生错误。所以include看起来不错,但它仍然不会使用它

现在我仔细想想,这很奇怪。当我去使用这个类时,include只发生在第5行<
spl\u auto\u寄存器调用code>ClassLoader
来搜索类。它发现并包含了这个类。然而同样的
第5行
实际上没有使用它


我想我不明白这种脱节<代码>第5行正确地调用了
类加载器
,但一旦加载,就无法真正找到类。

能否添加
ini\u集(“显示错误”,1)
在script.php上转储所有错误。你的代码看起来是正确的;除此之外,我甚至尝试过它,并按照它应该的方式工作。@abeyaz:我编辑了带有错误的主要帖子。奇怪的是,我是否需要编辑ini中的任何内容才能使其正常工作?因为代码是正确的,所以肯定缺少某些内容。你确定文件“classes/myspace/MyClass.php”存在并且该文件中的类定义正确吗?@abeyaz:再次编辑了主帖子。文件存在。如果我通过拼写错误来更改我试图加载的类,它将在包含上失败。您的代码对我起作用,因为您的代码对我起作用,所以您在那里还有其他操作。您可以添加
ini\u集(“display\u errors”,1)
在script.php上转储所有错误。你的代码看起来是正确的;除此之外,我甚至尝试过它,并按照它应该的方式工作。@abeyaz:我编辑了带有错误的主要帖子。奇怪的是,我是否需要编辑ini中的任何内容才能使其正常工作?因为代码是正确的,所以肯定缺少某些内容。你确定文件“classes/myspace/MyClass.php”存在并且该文件中的类定义正确吗?@abeyaz:再次编辑了主帖子。文件存在。如果我通过拼写错误来更改我试图加载的类,那么它将在include上失败。您的代码对我起作用,因为您有它,所以您还有其他东西在那里。