使用__autoload包含类和使用命名空间

时间:2014-05-23 23:14:26

标签: php facebook

是否有可能这样做?:

function __autoload($classname) {
    require_once("Facebook/". $classname .".php");
    use Facebook\$classname;
}

这样命名空间的使用也有效吗?

此致

1 个答案:

答案 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旨在隐藏实际包含类的文件的功能。使用类的文件不必知道如何包含该类,只是它可以访问。对于别名/导入,情况并非如此。知道导入名称空间或类别名是非常重要的。