如何在 PHP 中获取已定义的命名空间列表


给定文件 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 循环遍历声明的类。执行正则表达式匹配,并会显示在该特定环境中定义的命名空间。

更新于:09-Apr-2020

516 次浏览

开启您的 事业

完成课程即可获得证书

开始
广告
© . All rights reserved.