我从这个例子中得到了这个例子 http://www.php.net/manual/ru/function.spl-autoload.php#92767
但这会导致错误 *致命错误:spl_autoload()[function.spl-autoload]:无法在第18行的C:\ my_projects \ site.local \ www \ index.php中加载类空间*
的index.php
// Your custom class dir
define('CLASS_DIR', 'oop/classes');
// Add your class dir to include path
set_include_path(get_include_path().PATH_SEPARATOR.CLASS_DIR);
// You can use this trick to make autoloader look for commonly used "My.class.php" type filenames
spl_autoload_extensions('.class.php');
// Use default autoload implementation
spl_autoload_register();
new space/my;
/oop/classes/space/my.class.php
namespace space;
class my{
public function __construct{
var_dump('space class was here!');
}
}
我知道PSR-0,但在我的情况下,我需要了解构建函数的工作原理
答案 0 :(得分:3)
new space/my;
应该是
new space\my;
注意:您错过了()
__construct
的{{1}}
答案 1 :(得分:2)
以下代码行可能是语法错误,因为您没有像您想象的那样使用语言语法:
new space/my;
让我们把它分开:
new
- new
keyword,我们用它来实例化一个新对象。space
- 类的名称,此处为字符串"space"
。/
- division operator。 my
- (未定义?)常量my
,如果未定义,将导致字符串"my"
。由于这一点(即语言),PHP自然会尝试实例化类space
,然后尝试将其与字符串"my"
分开。例如:
$object = new space;
define('my', 0);
$result = $object / my;
由于您使用自动加载并且类space
不存在,您会看到致命错误。
严格说来语法错误不是在PHP中,而是使用错误的语法(这里:/
而不是\
,这是分隔名称空间的正确符号。)
希望这有帮助。请注意PHP有松散的输入,以便可以实例化would have produced probably a division by zero warning的现有类。
调试spl_autoload_register
:由于这是一个内部函数,当没有自动加载器回调函数使用时,您可以使用以下内容扩展它以进行调试:
spl_autoload_register(funcion($class) {
echo 'Autoloading class: ', var_dump($class), "\n";
return spl_autoload($class);
});
此外,您可能希望添加您的扩展程序,而不是覆盖现有的扩展程序:
($current = spl_autoload_extensions()) && $current .= ',';
spl_autoload_extensions($current . '.class.php');
# .inc,.php,.class.php