【发布时间】:2011-11-19 14:55:44
【问题描述】:
我已经使用 PHP 很长时间了,但现在我开始尝试新的语言功能,例如命名空间。我有一个关于自动加载的问题,我无法在我的网络搜索中找到足够的答案。
假设我在不同的命名空间中有类:
namespace foo\bar\baz;
class Quux
{
}
namespace fred\barney\wilma;
class Betty
{
}
然后假设我有一个自动加载器,它假定命名空间和目录结构之间存在 1:1 映射:
function autoload ($className)
{
$className = str_replace ('\\', DIRECTORY_SEPERATOR, $className);
include ($className . 'php');
}
spl_autoload_register ('autoload');
是否在所有情况下都将完全限定的命名空间传递给自动加载器,或者自动加载器是否需要考虑当前正在使用的命名空间?
例如,如果我执行以下操作:
$a = new \foo\bar\baz\Quux;
$b = new \fred\barney\wilma\Betty;
自动加载器应该可以正常工作。
但是如果我执行以下操作呢?
use \foo\bar\baz as FBB;
$a = new Quux;
$b = new \fred\barney\wilma\Betty;
当尝试实例化一个新的 Quux 时,自动加载器是否仍会获得 \foo\bar\baz\Quux 作为类名参数?还是应该得到FBB\Quux,甚至只是Quux?
如果是后者,我可以使用__NAMESPACE__ 或其他类似机制从我的自动加载器中确定该类应该位于的命名空间吗?
【问题讨论】:
-
那么你尝试的结果是什么?
标签: php namespaces php-5.3 autoload