Computer >> 컴퓨터 >  >> 프로그램 작성 >> PHP

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 루프가 선언된 클래스를 통해 실행됩니다. 정규식 일치가 수행되고 해당 특정 환경에서 정의된 네임스페이스가 표시됩니다.