PHP:了解spl_autoload_寄存器的include作用域
我正在尝试自动加载类,但范围限制了我。该类正在加载,但我使用它超出范围。下面是进一步解释我要做什么的代码 AutoLoader.phpPHP:了解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
<?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上失败。您的代码对我起作用,因为您有它,所以您还有其他东西在那里。