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