Zend फ्रेमवर्क में ऑटोलडिंग

शुभ संध्या, प्रिय प्रभामंडल। मैं आपके लिए लर्निंग ज़ेंड फ्रेमवर्क श्रृंखला के एक लेख का अपना अनुवाद प्रस्तुत करता हूँ।

मैं तुरंत एक आरक्षण करना चाहता हूं कि मैं अंग्रेजी के क्षेत्र में विशेषज्ञ नहीं हूं और 100% सही अनुवाद होने का दिखावा नहीं करता हूं, हालांकि हाल ही में मैंने इसे यथासंभव सर्वोत्तम अध्ययन करने के लिए निर्धारित किया है, क्योंकि मैं स्वतंत्र रूप से बोलना, पढ़ना, लिखना चाहता हूं।

इसलिए, यदि आपको मेरे अनुवाद में कोई अशुद्धि मिलती है, अगर मैंने किसी गलत तरीके से अनुवाद या व्याख्या की है, तो मुझसे संपर्क करें, मैं अपनी गलतियों को सुधारूंगा और मैं आपका बहुत आभारी रहूंगा।

तो वास्तव में अनुवाद:


परिचय



ऑटोलॉडिंग एक ऐसा तंत्र है जो आपके PHP कोड में फ़ाइलों और कक्षाओं के बीच मैन्युअल रूप से निर्भरता को ट्रैक करने की आवश्यकता को समाप्त करता है।

PHP मैनुअल का संगत अनुभाग बताता है कि स्टार्टअप तंत्र को कैसे जोड़ा जाए। इस तंत्र को जोड़ने के बाद, जब आप अपरिभाषित वर्ग या इंटरफ़ेस का उपयोग करते हैं, तो ऑटोलॉड फ़ंक्शन को स्वचालित रूप से कॉल किया जाएगा।

स्टार्टअप फ़ंक्शंस का उपयोग करना, आपको इस बारे में चिंता करने की ज़रूरत नहीं है कि आपके द्वारा उपयोग की जा रही फ़ाइल आपके प्रोजेक्ट में कौन सी फ़ाइल है। आपके पास अच्छे ऑटो लोडर होने से यह चिंता करने की ज़रूरत नहीं है कि वह फ़ाइल कहाँ स्थित है जिसमें आवश्यक वर्ग वर्णित है। आप अपने कोड में सिर्फ क्लास का उपयोग करते हैं, और ऑटो लोडर का ध्यान रखता है
आप की जरूरत वर्ग की घोषणा के लिए खोज समारोह।

इसके अलावा, ऑटोलैड का उपयोग करने से आपका बहुत समय बच सकता है, क्योंकि आपको अधिक आवश्यकता है
यह ध्यान रखने की आवश्यकता नहीं है कि कोई फ़ाइल पहले से कनेक्ट है या नहीं। आप को
यह जाँचने की आवश्यकता नहीं है कि फ़ाइल पहले से कनेक्ट थी या नहीं और यह पता चला कि फ़ाइल अभी भी कनेक्ट है
कई बार, यह requ_once () का उपयोग करने की आवश्यकता को समाप्त करता है ; फ़ाइलों को जोड़ने के लिए।

Zend फ्रेमवर्क ऑटोलॉड कक्षाओं का उपयोग करने की सिफारिश करता है और लोडिंग के लिए कई साधन प्रदान करता है
तृतीय-पक्ष कक्षाएं, साथ ही आपके एप्लिकेशन के अंदर लोडिंग कक्षाएं। यह मार्गदर्शिका बताती है कि Zend फ्रेमवर्क का उपयोग करके कक्षाओं की ऑटोलॉड सुविधा का उपयोग कैसे किया जाता है, और आपको इन सुविधाओं का सबसे प्रभावी ढंग से उपयोग करने में मदद करता है।

लक्ष्य और डिजाइन


क्लास नामकरण परंपराएँ


Zned फ्रेमवर्क में ऑटोलॉड का उपयोग करने के तरीके को समझने के लिए, पहले आपको समझने की आवश्यकता है
इस ढांचे में वर्ग के नाम और फ़ाइल नाम के बीच संबंध।

Zend फ्रेमवर्क PEAR में अपनाए गए वर्ग नाम का उपयोग करता है, जहाँ वर्ग नाम और फ़ाइल नाम के बीच 1: 1 अनुपात है। सीधे शब्दों में कहें, ZF में वर्ग नाम में "_" चिन्ह " /" द्वारा बदल दिया जाता है, और अंत में प्रत्यय ".php" वर्ग नाम में जोड़ा जाता है। उदाहरण के लिए, वर्ग का नाम "Foo_Bar_Baz" वास्तविक फ़ाइल "फू / बार / Baz.php" को इंगित करता है । इसके अलावा, PHP में files_path वैरिएबल की फ़ाइलों को खोज लिया गया है। जो आपको इस कॉन्फ़िगरेशन विकल्प में निर्दिष्ट निर्देशिकाओं में उन्हें खोजकर फ़ाइलों को कनेक्ट करने की अनुमति देता है।

इसके अलावा, हम अनुशंसा करते हैं कि आप अपनी सभी परियोजनाओं के लिए एक उपसर्ग का उपयोग करें। उदाहरण के लिए, सभी नाम
Zend फ्रेमवर्क में कक्षाएं उपसर्ग "Zend_" से शुरू होती हैं। यह नाम संघर्ष से बचा जाता है।
विभिन्न पुस्तकालयों का उपयोग करते समय। Zend फ्रेमवर्क के अंदर, हम इन उपसर्गों को रिक्त स्थान कहते हैं
नाम ("नेमस्पेस")। PHP नामस्थान के साथ भ्रमित न करें।

इस तरह के नियमों और सम्मेलनों का उपयोग आमतौर पर Zend फ्रेमवर्क में किया जाता है और हम अनुशंसा करते हैं कि आप
इन नियमों का पालन करें।

कन्वेंशन और ऑटोलैडर डिजाइन


Zend_Loader_Autoloader वर्ग का उपयोग करके Zend फ्रेमवर्क ऑटोलैड को लागू करता है
जो निम्नलिखित नियमों के अधीन है और निम्नलिखित समझौते हैं:

1. मिलान नामस्थान सुनिश्चित करता है। यदि वर्ग उपसर्ग पंजीकृत में अनुपस्थित है
एप्लिकेशन के अंदर, नाम स्थान FALSE देता है। इस तरह के एक संगठन की मदद से, आप कर सकते हैं
अन्य ऑटो लोडर में ऑटोलॉड ट्रांसफर करें।
2. आपको फॉलबैक मोड को सक्षम करने की अनुमति देता है। जब यह मोड सक्रिय हो जाता है, तो बूटलोडर कोशिश करेगा
लोडर के लिए "नेमस्पेस" की परवाह किए बिना कक्षाओं की तलाश करें।

3. आपको उन मामलों में त्रुटि आउटपुट को अक्षम करने की अनुमति देता है जहां बूटलोडर को आवश्यक वर्ग नहीं मिल सकता है।
डिफ़ॉल्ट रूप से, यह विकल्प अक्षम है। हालाँकि, आप चाहें तो इसे चालू कर सकते हैं।

4. आपको कॉलबैक फ़ंक्शन बनाने की अनुमति देता है, उदाहरण के लिए जब उपयोगकर्ता नहीं चाहता है
अंतर्निहित विधि Zend_Loader :: loadClass () का उपयोग करें । लेकिन उसी समय वह उपयोग करना चाहता है
Zend_Loader_Autoloader ऑटो लोडर तंत्र।

5. आपको विभिन्न बूटलोडर्स की श्रृंखला बनाने की अनुमति देता है। इस तरह से आप कनेक्ट कर सकते हैं
लोडिंग कक्षाओं के लिए इसके कार्य, उदाहरण के लिए, नामकरण सम्मेलन के अंतर्गत नहीं आते हैं
Zend फ्रेमवर्क में कक्षाएं। आप मानक से पहले और बाद में अपने ऑटोलैडर का उपयोग कर सकते हैं
Zend फ्रेमवर्क बूटलोडर।

बूटलोडर का मूल उपयोग।



अब जब हमने मूल बातें समझ ली हैं, तो आप अभ्यास कर सकते हैं और देख सकते हैं कि कैसे उपयोग किया जाए
वर्ग Zend_Loader_Autoloader।

इस वर्ग की फ़ाइल को जोड़ने का सबसे आसान तरीका। और एक बूटलोडर उदाहरण प्राप्त करें। इस पर भी ध्यान दिया जाना चाहिए
कि Zend फ्रेमवर्क बूटलोडर सिंगलटन पैटर्न पर बनाया गया है। इसलिए, वस्तु प्राप्त करने के लिए
GetInstance () पद्धति का उपयोग किया जाता है।

  1. need_once 'Zend / Loader / Autoloader.php' ;
  2. Zend_Loader_Autoloader :: getInstance ( ) ;


डिफ़ॉल्ट रूप से, बूटलोडर स्वचालित रूप से उपसर्गों के साथ शुरू होने वाले सभी वर्गों को जोड़ देगा।
"Zend_" या "ZendX_" , जिस पथ को शामिल_पथ चर में निर्दिष्ट किया गया है।

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

  1. need_once 'Zend / Loader / Autoloader.php' ;
  2. $ लोडर = Zend_Loader_Autoloader :: getInstance ( ) ;
  3. $ लोडर -> registerNamespace ( 'Foo_' ) ;
  4. $ लोडर -> रजिस्टरनामस्पेस ( सरणी ( 'Foo_' , 'Bar_' ) ) ;


इसके अलावा, आप फ़ॉलबैक मोड को सक्षम कर सकते हैं। इसका मतलब यह है कि लोडर उपसर्ग की परवाह किए बिना सभी वर्गों के लिए खोज करेगा।

  1. $ लोडर -> setFallbackAutoloader ( सच ) ;


सावधानी
फ़ॉलबैक मोड का उपयोग न करें। हम परियोजनाओं में इस विकल्प को छोड़ने की सलाह देते हैं
Zend फ्रेमवर्क, कोई फर्क नहीं पड़ता कि यह कितना आकर्षक लग सकता है।

Zend_Loader_Autoloader Zend_Loader :: loadClass () विधि का उपयोग करता है, जो बदले में
फ़ाइलों को शामिल करने के लिए शामिल () फ़ंक्शन का उपयोग करता है। यदि कोई फ़ाइल नहीं है, तो शामिल करें ()
झूठा लौटेगा। और PHP चेतावनी "चेतावनी त्रुटि" वापस कर देगा।

इससे कुछ समस्याएं हो सकती हैं।
1. यदि display_errors विकल्प सक्रिय है, तो आउटपुट स्ट्रीम में एक त्रुटि चेतावनी भेजी जाएगी।
2. अगर error_reporting मोड सेट किया गया है, जो चेतावनी के आउटपुट को प्रदर्शित करता है, तो वे आपके लॉग में लिखे जाएंगे
फ़ाइल कनेक्शन त्रुटियों के बारे में सभी चेतावनी।

बेशक, यदि आप सक्षम होने पर भी Zend_Loader_Autoloader के अंदर त्रुटि आउटपुट बंद कर सकते हैं
विकल्प display_errors हालांकि, यह विकल्प केवल आउटपुट स्ट्रीम में त्रुटियों को मौन करेगा।
त्रुटियों को लॉग को वैसे भी लिखा जाएगा, इसलिए हम अनुशंसा करते हैं कि आप अपने उपसर्गों का उपयोग करें
कक्षाएं और उन्हें बूटलोडर में पंजीकृत करें।

नोट:
जब यह मैनुअल लिखा गया था, PHP 5.3 रिलीज जारी किया गया था। PHP के इस संस्करण के साथ शुरू
नामस्थान का समर्थन करता है। हालांकि, इस सुविधा से पहले ZF विकसित किया गया था
PHP में दिखाई दिया, और हम रूपरेखा के अंदर नामस्थान का उपयोग करने के लिए सहमत हुए
वर्ग नामों के लिए उपसर्गों को असाइन करना। उदाहरण के लिए, फ्रेमवर्क के सभी वर्गों के लिए Zend_ उपसर्ग।
हम 2 संस्करण से शुरू होने वाले बूटलोडर में php नाम स्थान समर्थन शामिल करने की योजना बना रहे हैं
ढांचा।

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

इस दृष्टिकोण के लाभ यह हैं कि:
1. इनमें से प्रत्येक विधि एक दूसरा वैकल्पिक पैरामीटर है जो है
उपसर्ग कक्षाएं लोड करने के लिए। यानी आप Zend फ्रेमवर्क बूटलोडर को बता सकते हैं,
कि श्रृंखला से जुड़ा लोडर केवल एक विशिष्ट उपसर्ग के साथ कक्षाएं संसाधित करता है।
2. आपको लोडिंग कंट्रोल की समस्या नहीं होगी, जैसा कि सभी श्रृंखला विधियों में कार्य होते हैं
कालबैक। जिसमें spl_autoload_functions () तंत्र का अभाव है।

  1. / / समारोह 'my_autoloader' ढेर करने के लिए,
  2. // उपसर्ग के साथ कक्षाएं प्रबंधित करने के लिए 'My_':
  3. $ लोडर -> pushAutoloader ( 'my_autoloader' , ' My_ ' ) ;
  4. // स्टाइपेंड को स्थिर विधि Foo_Loader :: autoload () से जोड़ें
  5. // उपसर्ग के साथ वर्गों का प्रबंधन करने के लिए 'Foo_':
  6. $ लोडर -> unshiftAutoloader ( सरणी ( 'Foo_Loader' , 'autoload' ) , 'Foo_' ) ;


स्टार्टअप संसाधन।



वास्तविक अनुप्रयोगों का विकास करते समय, कभी-कभी ऐसी स्थितियाँ उत्पन्न होती हैं जब सभी अनुप्रयोग लाइब्रेरी नहीं होती हैं
Zend फ्रेमवर्क में स्वीकार किए गए नामों की सिफारिश के तहत आते हैं। इसका मतलब है कि ऑटो लोडर नहीं कर पाएगा
आवश्यक फाइलें ढूंढे।

तो, यदि आप सम्मेलनों और बूटलोडर डिज़ाइन पर अनुभाग पढ़ते हैं, तो आप अनुमान लगा सकते हैं
कि Zend फ्रेमवर्क इस समस्या को हल कर सकता है। इसके लिए एक क्लास Zend_Loader_Autoloader_Resource है
संसाधन से तात्पर्य एक नाम की उपस्थिति और उस पथ से है जिसके साथ आवश्यक वर्गों की खोज होगी।
और फ़ाइलें। सबसे सरल मामले में, यह कुछ इस तरह दिखता है:

  1. $ लोडर = नया Zend_Application_Module_Autoloader ( सरणी )
  2. 'नामस्थान' => 'ब्लॉग' ,
  3. 'आधारपथ' => आवेदन_पत्र '/ मॉड्यूल / ब्लॉग' ,
  4. ) ) ;


सबसे पहले, आपको बूटलोडर को उन संसाधनों के प्रकारों के बारे में सूचित करना होगा जो जुड़े होंगे।
ये प्रकार कुंजी-मूल्य जोड़े हैं।

उदाहरण के लिए, निम्न निर्देशिका ट्री लें:

  1. पथ / से / कुछ / संसाधन /
  2. | - फॉर्म /
  3. | ` - गेस्टबुक php // Foo_Form_Guestbook
  4. | - मॉडल /
  5. | | - DbTable /
  6. | | ` - गेस्टबुक php // Foo_Model_DbTable_Guestbook
  7. | | - गेस्टबुक php // Foo_Model_Guestbook
  8. | ` - GuestbookMapper php // Foo_Model_GuestbookMapper


सबसे पहले, एक संसाधन बनाएँ:

  1. $ लोडर = नया Zend_Loader_Autoloader_Resource ( सरणी (
  2. 'आधारपथ' => 'पथ / से / कुछ / संसाधन /' ,
  3. 'नेमस्पेस' => 'फू' ,
  4. ) ) ;


उसके बाद, आपको संसाधनों के प्रकार निर्धारित करने की आवश्यकता है। Zend_Loader_Autoloader_Resourse :: addResourceType () विधि
3 तर्क देता है। पहला तर्क संसाधन का नाम है। दूसरा तर्क, वह निर्देशिका जिसमें आप संसाधन की मूल निर्देशिका के सापेक्ष दिए गए संसाधन को देखना चाहते हैं। तीसरा पैरामीटर वर्ग उपसर्ग (या नाम स्थान) है।
इस उदाहरण में, हमारे पास 3 प्रकार के संसाधन हैं। पहला फॉर्म फॉर्म डायरेक्टरी में है और इसमें उपसर्ग "Form_" है। दूसरा मॉडल, मॉडल निर्देशिका में स्थित है और उपसर्ग Model_ और तीसरा dbTable इसी निर्देशिका में स्थित है।

  1. $ लोडर -> addResourceType ( 'फ़ॉर्म' , 'फ़ॉर्म' , 'फ़ॉर्म' )
  2. -> addResourceType ( 'मॉडल' , 'मॉडल' , 'मॉडल' )
  3. -> addResourceType ( 'dbtable' , 'मॉडल / DbTable' , 'Model_DbTable' ) ;


घोषणा के बाद, हम निम्न वर्गों का उपयोग करके अपने संसाधनों को लोड कर सकते हैं:

  1. $ फॉर्म = नया Foo_Form_Guestbook ( ) ;
  2. $ अतिथिपुस्तिका = नया Foo_Model_Guestbook ( ) ;


निष्कर्ष



ज़ेंड फ्रेमवर्क ऑटोलॉडिंग कक्षाओं के उपयोग को प्रोत्साहित करता है और आरंभ करता है
Zend_Application वर्ग में यह तंत्र।
हम आशा करते हैं कि इस गाइड ने आपको Zend_Loader_Autoloader घटक का उपयोग करने के बारे में आवश्यक जानकारी दी और इसके फायदे भी समझने में मदद की, जैसे कि अपने स्वयं के कस्टम ऑटोलॉटर और संसाधन ऑटोलॉजर्स को जोड़ना

फ्रेमवर्क के घटकों के साथ एक विस्तृत परिचय के लिए: Zend_Loader_Autoloader और Zend_Loader_Autoloader_Resource आप मैनुअल के संबंधित अनुभागों को पढ़ सकते हैं। Zend_Loader_Autoloader और Zend_Loader_Autoloader_Resource

Source: https://habr.com/ru/post/In119739/


All Articles