PHP 中是否可以获取已定义命名空间的列表
phpserver side programmingprogramming更新于 2025/6/27 13:52:17
假设文件 1 包含命名空间 ns_1,文件 2 包含命名空间 ns_2,如果文件 1 和文件 2 包含在文件 3 中,则无法知道命名空间 ns_1 和 ns_2 是否已加载。
唯一的方法是使用 ‘class_exists’ 函数,并使用 ‘get_declared_classes’ 获取具有特定命名空间的类列表。简而言之,根据所有声明的类名,可以使用获取的数据来查找匹配的命名空间。 −
function namespaceExists($namespace) {
$namespace .= "\";
foreach(get_declared_classes() as $name)
if(strpos($name, $namespace) === 0) return true;
return false;
}
----或者---
示例
<?php
namespace FirstNamespace;
class new_class {}
namespace SecondNamespace;
class new_class {}
namespace ThirdNamespace\FirstSubNamespace;
class new_class {}
namespace ThirdNamespace\SecondSubNamespace;
class new_class {}
namespace SecondNamespace\FirstSubNamespace;
class new_class {}
$namespaces=array();
foreach(get_declared_classes() as $name) {
if(preg_match_all("@[^\\]+(?=\\)@iU", $name, $matches)) {
$matches = $matches[0];
$parent =&$namespaces;
while(count($matches)) {
$match = array_shift($matches);
if(!isset($parent[$match]) && count($matches))
$parent[$match] = array();
$parent =&$parent[$match];
}
}
}
print_r($namespaces);
输出
这将产生以下输出 −
Array ( [FirstNamespace] => [SecondNamespace] => Array ( [FirstSubNamespace] => ) [ThirdNamespace] => Array ( [FirstSubNamespace] => [SecondSubNamespace] => ) )
创建不同的命名空间(FirstNamespace、SecondNamespace……),并声明空类(new_class)。创建一个命名空间数组,并运行 foreach 循环遍历所有声明的类。进行正则表达式匹配,并显示在特定环境中定义的命名空间。

