我一直在使用PHP很长一段时间,但现在开始尝试使用新的语言功能,如命名空间。我有一个关于自动加载的问题,我无法在我的网页搜索中找到适当的答案。自动加载和命名空间
假设我有不同的命名空间中的类:
namespace foo\bar\baz;
class Quux
{
}
namespace fred\barney\wilma;
class Betty
{
}
然后假设我有这样的假设,有一个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__
或其他类似的机制来确定类应该位于我的自动装载器中的命名空间?
那么你试过的结果是什么? – xdazz