परिचय
नेमस्पेस के अंदर नेमस्पेस बनाना संभव है। जैसे फाइल सिस्टम में एक डायरेक्टरी में सब-डायरेक्टरीज़ हो सकती हैं एक हायरार्किकल संरचना में, वैसे ही सब-नेमस्पेस को हायरार्की में व्यवस्थित किया जा सकता है। टॉप-लेवल और सब-लेवल नेमस्पेस के बीच संबंध को परिभाषित करने के लिए बैकस्लैश कैरेक्टर \ का उपयोग किया जाता है।
इस उदाहरण में टॉप-लेवल नेमस्पेस myspace में दो सब-नेमस्पेस space1 और space2 हैं। किसी सब-नेमस्पेस के अंदर फंक्शन्स/क्लासेज को एक्सेस करने के लिए, पहले इसे use कीवर्ड से उपलब्ध कराएं।
उदाहरण
<?php
namespace myspace\space1;
function hello() {
echo "Hello World from space1\n";
}
namespace myspace\space2;
function hello() {
echo "Hello World from space2\n";
}
use myspace\space1;
hello();
use myspace\space2;
hello();
?>
आउटपुट
Hello World from space2 Hello World from space2
व्याख्या
पहले use myspace\space1 के बाद hello() कॉल करने पर space1 का hello() चलना चाहिए था, लेकिन चूंकि बाद में use myspace\space2 किया गया, इसलिए दूसरा hello() space2 का चला। PHP में use स्टेटमेंट कंपाइल-टाइम पर रिज़ॉल्व होते हैं और अंतिम use स्टेटमेंट प्रभावी होता है।
सही उपयोग
प्रत्येक फंक्शन को उसके नेमस्पेस के साथ कॉल करें या अलग-अलग एलियास उपयोग करें:
<?php
namespace myspace\space1;
function hello() { echo "Hello World from space1\n"; }
namespace myspace\space2;
function hello() { echo "Hello World from space2\n"; }
namespace {
use myspace\space1;
use myspace\space2 as space2;
space1\hello(); // space1 का hello
space2\hello(); // space2 का hello
}
?>
मुख्य बिंदु
- सब-नेमस्पेस बैकस्लैश से अलग किए जाते हैं:
Vendor\Package\SubPackage useस्टेटमेंट फाइल के टॉप लेवल पर होने चाहिए (फंक्शन के अंदर नहीं)।useके साथ एलियासिंग:use Very\Long\Namespace\Name as ShortName- नेमस्पेस केस-इनसेंसिटिव होते हैं लेकिन कन्वेंशन लोअरकेस है।