是否有可能这样做?:
function __autoload($classname) {
require_once("Facebook/". $classname .".php");
use Facebook\$classname;
}
这样命名空间的使用也有效吗?
此致
答案 0 :(得分:1)
首先,我认为您可以使用class_alias
函数(http://www.php.net/manual/en/function.class-alias.php)执行此操作。它可能看起来像这样:
function __autoload($classname) {
require_once("Facebook/". $classname .".php");
class_alias("Facebook\$classname", $classname, false); // last param is false so this doesn't create an infinite loop
}
但是,即使您可以这样做,也不应该动态导入名称空间和别名类。它会使你的代码真的很混乱,它本质上否定了命名空间的功能(因为你包含的每个命名空间都会被别名/导入)。在实际使用类/命名空间的文件中,明确您的别名和导入更好。它更加清晰。
__autoload
旨在隐藏实际包含类的文件的功能。使用类的文件不必知道如何包含该类,只是它可以访问。对于别名/导入,情况并非如此。知道导入名称空间或类别名是非常重要的。