【发布时间】:2012-08-10 15:20:45
【问题描述】:
我在试验 spl_autoload、命名空间和动态类名时遇到了一个“奇怪”的事情。我使用 PHP 5.3.2,像这样调用自动加载
set_include_path(get_include_path().PATH_SEPARATOR."classes".PATH_SEPARATOR."utils");
spl_autoload_extensions(".class.php");
spl_autoload_register();
现在进入核心。建议以下代码:
new \User\Student;
$name="\User\Student";
new $name();
这工作正常,文件 classes/user/student.class.php 成功加载,两个构造都成功。但是,用法有点不同:
$name="\User\Student";
new $name();
new \User\Student;
在“..Class \User\Student 无法加载...”上失败。我建议它应该以某种方式与静态/动态命名空间解析有关。但是,我认为这两者之间应该没有任何区别,除了它们的处理时间(编译与运行时)。
感谢您的任何解释。
【问题讨论】:
-
尝试删除字符串中的前导反斜杠。动态类名始终是完全限定的,因此不鼓励在其中添加反斜杠。
标签: php namespaces autoload dynamic-class