我正在尝试自动加载类,但我受范围的阻碍。正在加载类,但我正在使用它超出范围。这是代码,以进一步解释我正在尝试做什么。
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
,但在加载后无法真正找到该类。