नेमस्पेसिंग इसे करने के लिए फायदे का एक बहुत है।
पहला यह है कि आप विधि नामों और यहां तक कि कक्षा के नामों का पुन: उपयोग कर सकते हैं यदि यह समझ में आता है कि वे एक अलग नामस्थान के भीतर मौजूद हैं। उदाहरण:
namespace \myNamespace\data\postgres;
class DataBase extends \PDO
{
}
namespace \myNamespace\data\mysql;
class DataBase extends \PDO
{
}
तुम भी एक साथ नामकरण के बारे में चिंता किए बिना ऐसे नाम हैं जो सामान्य रूप से PHP कार्यों के लिए आरक्षित हैं
namespace \myNamespace\dir;
function makedir()
{
if (// some condition is true)
{
\makedir();
}
}
यह सब यह आसान विभिन्न स्रोतों से कोड का उपयोग करने के बनाने के लिए करना है, पुन: उपयोग कर सकता है विरोध करता है। प्रदान किए गए प्रोग्रामर कुछ सरल नियमों का पालन करने के लिए विनम्र हैं, इसलिए नाम विवादों की संभावना बहुत कम हो गई है। असल में, विरोध करने वाले नामों से बचने के लिए आपको खुद को चिंता करने के लिए बहुत ही एकमात्र नियम है, जो आपके नामस्थान का पहला स्तर है। उदाहरण के लिए, अपने नाम के नाम के पहले स्तर के रूप में एक अद्वितीय विक्रेता के रूप में पहचानने के लिए अपनी कंपनी का नाम, या कुछ अन्य तरीका का उपयोग करें और सबकुछ अच्छा होना चाहिए।
उदाहरण मैं \ Gordian सभी कोड मैं लिखने में उपयोग जड़ नाम स्थान के रूप में, जैसा कि मैंने तो उस नाम स्थान कुछ भी मैं के बारे में उन्हें कोई है जो एक अलग जड़ नाम स्थान चुना है के साथ टकराने में चिंता किए बिना चाहते तहत मेरी कक्षाओं के लिए कॉल कर सकते हैं
।
तो पीयर सम्मेलनों के साथ क्या गलत है, आप पूछ सकते हैं? लोकप्रिय ज़ेंड ढांचे सहित कई परियोजनाएं उनका पालन करती हैं।
जवाब नाम बहुत जल्दी बहुत भारी-भरकम हैं है। उदाहरण के लिए, ज़ेंड, जैसा कि यह पियर सम्मेलन का पालन करता है, एक छद्म नाम-नाम का उपयोग करता है। संग्रह में सभी वर्ग Zend_ के साथ शुरू होते हैं और प्रत्येक श्रेणी के वर्ग पदानुक्रम के साथ नाम पर एक और हिस्सा जोड़ते हैं।
ज़ी परिणामस्वरूप, आप Zend_Db_Adaptor_Abstract और Zend_Dojo_Form_Decorator_TabContainer जैसे क्लास नामों के साथ समाप्त होते हैं।
क्या ज़ेंड को नामस्थानों का उपयोग करने के लिए अपने ढांचे को अद्यतन करना चाहिए (जो मुझे बताया गया है कि ज़ेंड फ्रेमवर्क 2.0 के साथ हो रहा है) तो उन्हें \ Zend \ Db \ Adapter \ सार और \ Zend \ Dojo \ Form \ Decorator \ इसके बजाय TabContainer। तो क्या, आप पूछ सकते हैं? जवाब यह है कि आप उन्हें उपयोग किए गए कीवर्ड के साथ बहुत छोटे नामों के साथ उपनाम कर सकते हैं, जैसा कि आपने पहले ही देखा है। इसका मतलब है कि आपको पूर्ण श्रेणी का नाम लिखना नहीं है, लेकिन केवल आपके द्वारा उपरोक्त किए गए कार्यों के लिए।
use \Zend\Dojo\Forn\Decorator as Dec;
$a = new Dec\TabContainer; // Not easy to do without namespaces!
इसके अलावा अधिक, यदि आप किसी दिए गए नाम स्थान में पहले से ही कर रहे हैं, तो आप भी एक छोटी नाम से एक ही नाम स्थान के भीतर अन्य मदों का उपयोग करने के उपयोग कीवर्ड का उपयोग करने के, की जरूरत नहीं है के रूप में यह करने के लिए अपने आप होता है आप उस मामले में। ढांचे लेखकों के लिए यह एक बड़ा टाइमवेवर है।
उदाहरण के लिए, आप Zend फ्रेमवर्क 2 में followign की तरह कुछ देख सकता है (के रूप में मैं किसी भी तरह से इस पर काम कर नहीं कर रहा हूँ, यह विशुद्ध रूप एक उदाहरण है और वास्तविक ZF2 स्रोत से नहीं)।
namespace \Zend\Db\Adaptor;
class Postgres extends Abstract // We don't need to use \Zend\Db\Adaptor\Abstract here because it's in the same namespace already anyway
{
}
वहाँ अन्य लाभ भी हैं, इस तरह के रूप में यह autoloaders हास्यास्पद बनाने के लिए सरल बना देता है (आपका नाम स्थान संरचना प्रदान की अपनी फाइल सिस्टम निर्देशिका संरचना पर बिल्कुल नक्शे)।
नेमस्पेस उन सुविधाओं में से एक की तरह प्रतीत हो सकते हैं जो वास्तव में बहुत महत्वपूर्ण नहीं हैं, या यहां तक कि कोई समझ नहीं आता है, लेकिन थोड़ी देर के लिए उनका उपयोग करने के बाद उनकी उपयोगिता अचानक स्पष्ट हो जाएगी।
यह आश्चर्यजनक है और अब मैं नामों का उपयोग करना चाहता हूं, इससे पहले कि मैं वास्तव में नहीं चाहता था क्योंकि मैंने सोचा था कि मुझे अपने पूरे कोड में बुराई दिखने वाला \\ 'विभाजक से निपटना होगा। यह मुझे पाइथन की याद दिलाता है, जिस तरह से आपको पुस्तकालयों को आयात करना है – JasonDavis
असल में मुझे कहना चाहिए कि यह सी # की तरह है जहां वे सिस्टम का उपयोग कर रहे हैं ... 'सिस्टम का उपयोग कर।' सिस्टम का उपयोग कर। चयन। जेनरिक; 'आदि ... मैं बस यह नहीं पता था कि वे नेमस्पेस आयात कर रहे थे। मैं यह भी देख सकता हूं कि यह एनएस विभाजक के रूप में एक बिंदु/अवधि के साथ कितना अच्छा लगेगा। – JasonDavis
एक त्वरित सवाल, जैसे आपने 'मेरा \ NFirstNamespace \ Foo को बार के रूप में उपयोग किया है;' मुझे पता है कि आप इस तरह का नाम बदल सकते हैं लेकिन मैंने जो कोड देखा है, उन्होंने इसे मेरे उदाहरण की तरह किया है ... 'उपयोग \ MyFirstNamespace \ Foo ; 'और फिर' Foo' का उपयोग कर एक्सेस करें क्या यह संभव है? ध्यान दें कि मैंने सेट नहीं किया है और कुछ भी है या क्या आपको इसे 'उपयोग \ MyFirstNamespace \ Foo को Foo के रूप में सेट करना होगा;'? – JasonDavis