在 PHP 中使用命名空间和自动加载从变量创建对象
2022-08-30 22:26:07
之后用我自己的评论编辑
我认为问题在于,当PHP解析文件以“编译”时,首先它将类名转换为其完全限定名。因此,索引将转换为控制器\主页\索引。之后,是PHP将变量转换为其值的时间。因此,如果我使用变量作为类名,它不会限定其名称,因为该步骤已经发生。这就是为什么没有找到类。这只是一个猜测,但很可能是这样 Blockquote
结束编辑
我使用来自Symfony2项目的UniversalClassLoader来自动加载我的类,但是我发现了一些我无法解决的奇怪错误。
自动加载的东西工作正常,但后来我遇到了这个问题:
$controller = new Index(); // It works!
$controller_name = "Controller\\Home\\Index";
$controller2 = new $controller_name(); // It works!
$controller_name = "Index";
$controller3 = new $controller_name(); // Fatal error: Class 'Index' not found
前两种情况工作正常。在第一个中,由于我在脚本的开头使用了“use Controller\Home;”,所以我可以毫无问题地使用“new Index();”。但是,如果我不写“Index”,而是使用像$var = “Index”这样的字符串变量,它就不起作用。我不明白为什么。我需要这个脚本是动态的,这就是为什么我需要一个变量。
谢谢!
其他长尾搜索:
- 来自变量的 php 完全限定名
- php 从变量中的别名实例化类