Namespaces सिर्फ autoloading classes के लिए नहीं हैं। वे नामकरण संघर्ष को भी रोकते हैं। वास्तव में, यह उनका प्राथमिक उद्देश्य है।
मान लें कि आपके पास एक प्रोजेक्ट है User
, जिसे आपके एप्लिकेशन के उपयोगकर्ताओं के बारे में जानकारी संग्रहीत करने के लिए एक वर्ग की आवश्यकता है , लेकिन एक प्लगइन एक (अलग) वर्ग का उपयोग करता है जिसका नाम User
जानकारी संग्रहीत करने के लिए है। Namespaces आपको एक नाम स्थान (कहते हैं MyApp
) के भीतर अपनी कक्षा बनाने देता है और प्लगइन को दूसरे नामस्थान (कहते हैं, CoolPlugin
) का उपयोग करने देता है। MyApp
अंतरिक्ष के भीतर कोड केवल User
(उदाहरण के लिए new User();
) का उल्लेख कर सकता है , और इसलिए CoolPlugin
अंतरिक्ष में कोड कर सकता है; प्रत्येक को अपेक्षित परिणाम मिलेगा। जब आपको किसी अन्य नामस्थान से कोड का उपयोग करने की आवश्यकता होती है , तो आप इसे उपसर्ग करते हैं। उदाहरण के लिए, CoolPlugin
अंतरिक्ष में कोड के माध्यम से User
कक्षा में प्रवेश कर सकते हैंMyApp
new \MyApp\User();
विकल्प यह है कि हर वर्ग को हर जगह एक जटिल नाम की आवश्यकता होती है , जैसे कि class MyApp_User
और class CoolPlugin_User
। Namespaces आपको ज्यादातर समय चीजों को सरल बनाने और हर समय नामकरण टकराव से बचने की अनुमति देता है।
संपादित करें: प्रश्न का उत्तर देने के लिए, "क्या दोनों के बीच कोई प्रदर्शन अंतर है?"
सार्थक नहीं, नहीं। मैंने इसे बेंचमार्क नहीं किया है, लेकिन शायद नैनोसेकंड स्तर पर अंतर है। उस ने कहा, सुपर-छोटे प्रदर्शन के लिए कोड गुणवत्ता का त्याग करना एक अच्छी रणनीति नहीं है, इसलिए आपको नाम स्थान का उपयोग करना चाहिए। इसी तरह की समस्याओं के मानदंड के लिए, PHPbench.com और यह StackOverflow उत्तर देखें ।
इससे पहले कि आप इस तरह के संदर्भ में माइक्रो-ऑप्टिमाइज़ करने के बारे में चिंता करने की जरूरत है, आपके कोड को अविश्वसनीय रूप से तंग और अविश्वसनीय रूप से समय-संवेदनशील (उच्च-आवृत्ति व्यापार या परमाणु प्रतिक्रियाओं का प्रबंधन) करने की आवश्यकता है। यदि यह वास्तव में समय के प्रति संवेदनशील है, तो आपको संभवतः सी या असेंबली में कोडिंग करना चाहिए , न कि PHP जैसी भाषाओं की व्याख्या।