我在 php 中有一个自定义的自动加载器。搜索路径设置在一个数组中。加载本身:
这是一个 spl_autoload_register() 注册函数!
if (!isset($autoloadClassPaths[$classname]))
{
foreach ($path as $dir)
{
foreach (new DirectoryIterator($dir) as $fileinfo)
{
if (substr($fileinfo->getFilename(), -4) == '.php')
{
$tokens = token_get_all(file_get_contents($fileinfo->getPathname()));
$count = count($tokens);
for ($i = 2; $i < $count; $i++)
{
if ( ($tokens[$i - 2][0] == T_CLASS || $tokens[$i - 2][0] == T_INTERFACE)
&& $tokens[$i - 1][0] == T_WHITESPACE
&& $tokens[$i][0] == T_STRING)
{
$autoloadClassPaths[$tokens[$i][1]] = $fileinfo->getPathname();
}
}
}
}
}
}
else
{
require ($autoloadClassPaths[$classname]);
}
问题是现在我遇到了命名空间。这个自动加载怎么写?
最佳答案
使用这样的自动加载器,您可以获得任何类的类名,例如 SomeClassName
.如果是命名空间类,你会得到类名的命名空间,就像这样 SomeNamespace\SomeClassName
.如果您有一个干净的目录结构,它包括加载文件所需的所有信息。 (例如:library\SomeNamespace\SomeClassName.php)。
关于php - 在 PHP 中,我有一个自定义的自动加载器,如何为命名空间扩展它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13158285/