मैं मौजूदा कोड को तोड़ने के बिना किसी लाइब्रेरी में आंशिक रूप से PHP नामस्थान कैसे जोड़ूं?


10

मेरी कंपनी ने कुछ वर्षों में एक मॉड्यूलर PHP फ्रेमवर्क बनाया है, जो PHP 5.3 जोड़े गए नामस्थानों से बहुत पहले शुरू हुआ था। हाल ही में, हमने अपने पुस्तकालय के नए कोड में नामस्थानों का उपयोग शुरू करने का फैसला किया, और हम अंततः पुराने कोड नामस्थान का इरादा रखते हैं। हालाँकि, हमारे पास कुछ मुद्दे हैं जिन्हें हम यह निर्धारित करने के लिए काम करने की कोशिश कर रहे हैं कि क्या नामस्थानों को पूर्व v5.3 कोडबेस में जोड़ना सिर्फ एक अच्छा विचार नहीं है:

  1. क्या मैं एक वैश्विक नाम स्थान का आयात (उपयोग) भी कर सकता हूं, इसलिए सभी वैश्विक वर्गों को \उपसर्ग की आवश्यकता नहीं है ?
  2. यदि हम अपने पुस्तकालय में एक मौजूदा वर्ग को नामांकित करते हैं, तो हम फ्रेमवर्क अपग्रेड के रूप में सभी मौजूदा परियोजनाओं को टूटने से कैसे रोक सकते हैं? उदाहरण के लिए, क्या पुस्तकालय कक्षा ThemeEngineका नाम बदल सकता है \module\theme\ThemeEngine, लेकिन मौजूदा वेबसाइटें ThemeEngineबिना किसी कोड संशोधन के कॉल करती हैं ? यदि हां, तो वह कोड कैसा दिखेगा?

जवाबों:


2
  1. आप सभी वर्गों पर, दुख की बात है, केवल नाम का उपयोग नहीं कर सकते हैं: http://www.php.net/manual/en/language.namespaces.importing.php । संपादित करें: आप वैश्विक नामस्थान से कक्षाएं आयात कर सकते हैं, जैसे कि उन्होंने एक उदाहरण में ArrayObject के साथ किया था।

  2. आपके पास उपयोग के बयानों का एक वैश्विक खंड हो सकता है ताकि सभी पूर्व-विद्यमान कक्षाएं, जो वैश्विक नामस्थान में भी हों, सैद्धांतिक रूप से कक्षाएं ठीक-ठीक मिलनी चाहिए। सैद्धांतिक रूप से ...

हम आप के रूप में एक ही नाव में हैं। हमारे पास कुछ पुराने कोड हैं जो नेमस्पेस का उपयोग नहीं करते हैं, लेकिन _ नामस्थान फ़ेकर (जैसे Zend_Db_Table ...) का उपयोग करते हैं और हमारे पास कुछ पुराने कोड हैं जो फर्जी नामस्थान भी नहीं बनाते हैं। हम शायद एक ही मार्ग लेने जा रहे हैं, लेकिन हमें अभी भी परीक्षण करना होगा अगर यह बिल्कुल संभव है। सौभाग्य!


1

हाँ, जो मैंने अंत में किया, वह था - 'उपयोग' व्यक्तिगत वर्गों को आयात करने के लिए जिनकी मुझे ज़रूरत थी

उदाहरण के लिए जैसे सब कुछ के सामने '/' जोड़ने के बजाय:

\DateTime()

मैंने अपने नामस्थान के तहत जोड़ा

namespace MyProject;
use DateTime;

...
DateTime();     //without \
...
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.