是否有可能在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循环。正则表达式匹配完成,并且将显示在该特定环境中定义的命名空间。

以上是 是否有可能在PHP中获得已定义名称空间的列表 的全部内容, 来源链接: utcz.com/z/317091.html

回到顶部