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