परिचय
PHP कोड में नेमस्पेस की उपस्थिति निम्नलिखित नियमों के अधीन रिज़ॉल्व होती है:
नेमस्पेस सेपरेटर सिंबल (\) के बिना एक नेमस्पेस पहचानकर्ता का अर्थ है कि यह वर्तमान नेमस्पेस को संदर्भित कर रहा है। यह एक अनक्वालिफाइड नाम है।
यदि इसमें सेपरेटर सिंबल है जैसे myspace\space1, तो यह myspace के तहत सबनेमस्पेस space1 को रिज़ॉल्व करता है। इस प्रकार का नामकरण सापेक्ष नेमस्पेस है।
पूरी तरह से क्वालिफाइड नेमस्पेस का नाम \ कैरेक्टर से शुरू होता है। उदाहरण के लिए, \myspace या \myspace\space1।
फुली क्वालिफाइड नाम निरपेक्ष नेमस्पेस को रिज़ॉल्व करते हैं। उदाहरण के लिए \myspace\space1 myspace\space1 नेमस्पेस को रिज़ॉल्व करता है।
यदि नाम ग्लोबल नेमस्पेस में होता है, तो namespace\ प्रीफिक्स हटा दिया जाता है। उदाहरण के लिए namespace\space1 space1 को रिज़ॉल्व करता है।
हालांकि, यदि यह किसी अन्य नेमस्पेस के अंदर होता है, तो इसका व्यवहार अलग होता है। उदाहरण के लिए, यदि namespace\space1 myspace के अंदर है, तो यह myspace\space1 के बराबर है।
क्वालिफाइड नाम में नाम का पहला सेगमेंट वर्तमान क्लास/नेमस्पेस इम्पोर्ट टेबल के अनुसार अनुवादित होता है।
यदि कोई इम्पोर्ट नियम लागू नहीं होता, तो वर्तमान नेमस्पेस नाम के सामने जोड़ दिया जाता है।
क्लास-जैसे नाम क्लास/नेमस्पेस इम्पोर्ट टेबल के अनुसार अनुवादित होते हैं, फंक्शन नाम फंक्शन इम्पोर्ट टेबल के अनुसार और कॉन्स्टेंट्स कॉन्स्टेंट इम्पोर्ट टेबल के अनुसार।
अनक्वालिफाइड नामों के लिए, यदि कोई इम्पोर्ट नियम लागू नहीं होता और नाम फंक्शन या कॉन्स्टेंट को संदर्भित करता है और कोड ग्लोबल नेमस्पेस के बाहर है, तो नाम रनटाइम पर रिज़ॉल्व होता है। पहले यह वर्तमान नेमस्पेस से फंक्शन ढूंढता है, फिर ग्लोबल फंक्शन को खोजने और कॉल करने का प्रयास करता है।
व्यावहारिक उदाहरण
<?php
namespace A\B\C;
class MyClass {}
function myfunction() {}
const MYCONST = 1;
// अनक्वालिफाइड नाम
$obj = new MyClass(); // A\B\C\MyClass
myfunction(); // A\B\C\myfunction
echo MYCONST; // A\B\C\MYCONST
// क्वालिफाइड नाम
$obj = new D\MyClass(); // A\B\C\D\MyClass
D\myfunction(); // A\B\C\D\myfunction
echo D\MYCONST; // A\B\C\D\MYCONST
// फुली क्वालिफाइड नाम
$obj = new \GlobalClass(); // GlobalClass (ग्लोबल)
\globalFunction(); // globalFunction (ग्लोबल)
echo \GLOBAL_CONST; // GLOBAL_CONST (ग्लोबल)
// use के साथ इम्पोर्ट
use X\Y\Z as AliasedClass;
$obj = new AliasedClass(); // X\Y\Z
?>
फॉलबैक नियम (ग्लोबल फंक्शन्स/कॉन्स्टेंट्स के लिए)
यदि वर्तमान नेमस्पेस में कोई फंक्शन/कॉन्स्टेंट नहीं मिलता, तो PHP ग्लोबल नेमस्पेस में खोजता है:
<?php
namespace MyProject;
strlen("test"); // पहले MyProject\strlen खोजता है, नहीं मिलने पर ग्लोबल strlen() कॉल करता है
MY_CONSTANT; // पहले MyProject\MY_CONSTANT खोजता है, नहीं मिलने पर ग्लोबल MY_CONSTANT
?>
यह फॉलबैक केवल फंक्शन्स और कॉन्स्टेंट्स के लिए काम करता है, क्लासेज के लिए नहीं।