फ़ाइल 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] => ) )
अलग-अलग नामस्थान बनाए जाते हैं (फर्स्टनेमस्पेस, सेकेंडनेमस्पेस ..) और खाली वर्ग घोषित किया जाता है (new_class)। नेमस्पेस की एक सरणी बनाई जाती है और घोषित कक्षाओं के माध्यम से एक फ़ोरैच लूप चलता है। एक नियमित अभिव्यक्ति मिलान किया जाता है और उस विशिष्ट वातावरण में परिभाषित नामस्थान प्रदर्शित किए जाएंगे।