नामस्थानों के पेशेवरों और विपक्षों में शामिल हैं / PHP में आवश्यकता है?


20

मैंने हाल ही में PHP में नामस्थानों का उपयोग शुरू किया है। जब मैंने पहली बार उन्हें देखा, तो मुझे लगा कि उनका सिंटैक्स बदसूरत था और मैं उन्हें कभी इस्तेमाल नहीं करूंगा। हालाँकि, मैंने एक ऑटोलैडर (spl_autoload_register) बनाया, जो इसे बनाता है ताकि मुझे कभी भी एक शामिल / कथन को फिर से लिखना न पड़े।

मुझे नामस्थान पसंद हैं, लेकिन क्या इसमें कोई उद्देश्य लाभ शामिल है / बयानों की आवश्यकता है, या वे एक ही लक्ष्य को पूरा करने के लिए सटीक एक ही विधि हैं?


1
नेमस्पेस तृतीय-पक्ष पुस्तकालयों के साथ टकराव को रोकते हैं।
रिएक्टगुलर

1
अभी नामस्थानों के विषय में मेरे लिए प्राथमिक लाभ ऑटोलेडिंग है। उदाहरण के लिए, मैं new \Vendor\Namespace\Class()विधि या वर्ग में पहले आवश्यकता बयान के बिना इन-लाइन का उपयोग करता हूं ।
नोबल उत्थान

3
कई PHP लाइब्रेरी बिना नेमस्पेस के ऑटोलॉडिंग का उपयोग करती हैं। PHP को नेमस्पेस को अनिवार्य करना चाहिए।
रिएक्टगुलर

मुझसे कोई तर्क नहीं। मैं इन सभी परिवर्तनों को यहाँ सूचीबद्ध देखना चाहता हूँ ।
नोबल उत्थान

जवाबों:


21

Namespaces सिर्फ autoloading classes के लिए नहीं हैं। वे नामकरण संघर्ष को भी रोकते हैं। वास्तव में, यह उनका प्राथमिक उद्देश्य है।

मान लें कि आपके पास एक प्रोजेक्ट है User, जिसे आपके एप्लिकेशन के उपयोगकर्ताओं के बारे में जानकारी संग्रहीत करने के लिए एक वर्ग की आवश्यकता है , लेकिन एक प्लगइन एक (अलग) वर्ग का उपयोग करता है जिसका नाम Userजानकारी संग्रहीत करने के लिए है। Namespaces आपको एक नाम स्थान (कहते हैं MyApp) के भीतर अपनी कक्षा बनाने देता है और प्लगइन को दूसरे नामस्थान (कहते हैं, CoolPlugin) का उपयोग करने देता है। MyAppअंतरिक्ष के भीतर कोड केवल User(उदाहरण के लिए new User();) का उल्लेख कर सकता है , और इसलिए CoolPluginअंतरिक्ष में कोड कर सकता है; प्रत्येक को अपेक्षित परिणाम मिलेगा। जब आपको किसी अन्य नामस्थान से कोड का उपयोग करने की आवश्यकता होती है , तो आप इसे उपसर्ग करते हैं। उदाहरण के लिए, CoolPluginअंतरिक्ष में कोड के माध्यम से Userकक्षा में प्रवेश कर सकते हैंMyAppnew \MyApp\User();

विकल्प यह है कि हर वर्ग को हर जगह एक जटिल नाम की आवश्यकता होती है , जैसे कि class MyApp_Userऔर class CoolPlugin_User। Namespaces आपको ज्यादातर समय चीजों को सरल बनाने और हर समय नामकरण टकराव से बचने की अनुमति देता है।

संपादित करें: प्रश्न का उत्तर देने के लिए, "क्या दोनों के बीच कोई प्रदर्शन अंतर है?"

सार्थक नहीं, नहीं। मैंने इसे बेंचमार्क नहीं किया है, लेकिन शायद नैनोसेकंड स्तर पर अंतर है। उस ने कहा, सुपर-छोटे प्रदर्शन के लिए कोड गुणवत्ता का त्याग करना एक अच्छी रणनीति नहीं है, इसलिए आपको नाम स्थान का उपयोग करना चाहिए। इसी तरह की समस्याओं के मानदंड के लिए, PHPbench.com और यह StackOverflow उत्तर देखें

इससे पहले कि आप इस तरह के संदर्भ में माइक्रो-ऑप्टिमाइज़ करने के बारे में चिंता करने की जरूरत है, आपके कोड को अविश्वसनीय रूप से तंग और अविश्वसनीय रूप से समय-संवेदनशील (उच्च-आवृत्ति व्यापार या परमाणु प्रतिक्रियाओं का प्रबंधन) करने की आवश्यकता है। यदि यह वास्तव में समय के प्रति संवेदनशील है, तो आपको संभवतः या में कोडिंग करना चाहिए , न कि PHP जैसी भाषाओं की व्याख्या।


1
+1 मैं बस ध्यान देता हूं कि प्रत्येक परियोजना को ऐसा लगने लगता है कि उसे संभवतः नामस्थान की आवश्यकता नहीं हो सकती है, और फिर आसानी से इस बिंदु तक बढ़ जाता है कि उनके बिना काम करने के लिए चीजों को हैक करना हास्यास्पद हो जाता है। नाम स्थान नहीं होना मूल रूप से हर वैरिएबल को घोषित करने के समान है, जैसा कि कक्षाओं में लागू होता है। बड़े कोड आधारों या पुस्तकालयों का उदार उपयोग करने वाले लोगों पर, यह कुल गड़बड़ हो जाता है।
ब्रायन

1
कृपया मेरा संपादन ऊपर देखें।
elixenide

2
क्या मैंने उल्लेख किया है कि मैं बड़े हैड्रॉन कोलाइडर के लिए PHP इंटरफ़ेस बना रहा हूं? अन्यथा, मेरा मानना ​​है कि यह उत्तर पर्याप्त है, धन्यवाद।
नोबल उत्थान

1
कृपया कोई क्वार्क स्टार या ब्लैक होल न बनाएं! मदद करने में खुशी।
elixenide

1
चिंता न करें, केवल अजीब। हम हैड्रॉन तोपों का निर्माण कर रहे हैं- मेरा मतलब है, कुछ दक्षता और हथियार नहीं।
NobleUplift
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.