2009-11-07 23 views
10

नेमस्पेस वास्तव में उपयोगी हैं और हाल ही में कुछ रिलीज, AFAIK तक PHP के लिए उनके लिए कोई समर्थन नहीं था।
जब मैं ज़ेंड फ्रेमवर्क का उपयोग कर रहा हूं, मुझे अंडरस्कोर के साथ लंबे नाम याद रखना होगा - जैसे Zend_Form_Element_Button या Zend_Form_Decorator_HtmlTag और इसी तरह।
अगर मैं नामस्थान का उपयोग करें, यह संभव हो सकता है, और इतना आसान:मैं ज़ेंड फ्रेमवर्क के साथ नेमस्पेस का उपयोग कैसे करूं?

 
namespace Zend { 
    class something { 
    // ... 
    } 
} 

namespace Zend\Form { 
    class something { 
    // ... 
    } 
} 

namespace Zend\Form\Element { 
    class Button { 
    // ... 
    } 
} 

और यह उपयोग करने के लिए मैं इस:

 
use Zend\Form\Element\Button; 
$btn1 = new Button(); 

तो मेरे सवाल है, यह तुच्छता से संभव है , ऑटोलोडर सिस्टम और ज़ादा फ्रेमवर्क के अंदर रहने वाले मेटा-क्लास "ब्लैक जादू" के बहुत सारे नामस्थान का उपयोग करके कोड की संरचना को फिर से लिखते हैं, और फिर अधिक समझदार वर्ग नाम हैं?
समस्या कक्षा के नामों की लंबाई नहीं है - ग्रहण/नेटबीन्स/Aptana बहुत अच्छी तरह से संभालती है, यह परेशान है कि लंबे नाम हैं।
कुछ समय बाद भ्रमित करने के लिए का उपयोग करने वाले कुछ वर्गों के नाम में समान भागों हैं।
जेडएफ ओपन सोर्स लाइसेंस प्राप्त है, मुझे नहीं लगता कि ज़ेंड कोड का नामित संस्करण, होगा यदि केवल नामकरण और कोड का कुछ पुन: संगठन प्राप्त कर सकता है।

+0

आपने इसे समुदाय विकी के रूप में क्यों चिह्नित किया? –

+0

अनुमान में प्रमुख त्रुटि। ओह। मैं समुदाय की स्थिति को पूर्ववत नहीं कर सकता। क्षमा याचना। मुझे उम्मीद है कि यह बहुत से लोगों के लिए उपयोगी होगा और इसलिए संपादित आदि। यह बिल्कुल छोटा नहीं है क्योंकि धागे स्पष्ट रूप से दिखाए गए हैं। – namespaceform

उत्तर

16

मामूली नहीं, नहीं।

मैथ्यू Weier O'Phinney जेडएफ सामना करने के लिए अगर और जब वे कोड refactor पीएचपी 5.3 नेमस्पेसिंग का समर्थन करना होगा मुद्दों में से कुछ के बारे में एक ब्लॉग लिखा है:

http://weierophinney.net/matthew/archives/181-Migrating-OOP-Libraries-and-Frameworks-to-PHP-5.3.html

Abstract एक सुरक्षित है PHP में शब्द। वही इंटरफ़ेस के लिए जाता है। पर विचार करें यह विशेष रूप से aggregious उदाहरण:

namespace Zend::View 

abstract class Abstract implements Interface 
{ 
    // ... 
} 

हम दो आरक्षित शब्द वहाँ मिल गया है: Abstract और Interface

ज़ेंड फ्रेमवर्क Abstract और Interface नामक कक्षाओं से भरा है। उन्हें जेडएफ कोड समर्थन नामस्थान बनाने के लिए बड़ी संख्या में पिछड़े-असंगत रिफैक्टरिंग परिवर्तन करने होंगे।

बैकस्लैश के बाद से

इसके अलावा, तार में एक metacharacter, किसी भी कोड है कि गतिशील classname के आधार पर कक्षाओं लोड करता है, इस तरह के Zend_Db::factory() या Zend_Filter_Input के रूप में, खरगोश ब्रेंड निर्णय PHP में कोर टीम बनाई की वजह से, लागू करने के लिए अनावश्यक रूप से कठिन है बैकस्लैश का उपयोग कर नामस्थान विभाजक के रूप में।

+0

सहमत हुए।मैं सोच रहा था कि उन्होंने बैकस्लैश का उपयोग क्यों किया, जब §, ~ या कुछ संयोजन जैसे कि //, ~~ जैसे काम अच्छे होंगे ... –

+4

उन्होंने दावा किया कि यह सादा ASCII में केवल एक प्रिंट करने योग्य चरित्र था, जिसका उपयोग वे भ्रमित किए बिना कर सकते थे पार्सर पहले से ही PHP में हर दूसरे चरित्र का एक और अर्थ था। इसके बावजूद, मुझे लगता है कि बैकस्लैश एक खराब विकल्प था। बैकस्लैश पर निर्णय लेने से पहले उन्हें दो (या अधिक) वर्णों का अनुक्रम इस्तेमाल करना चाहिए था। –

संबंधित मुद्दे