"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > ऑटोलॉडर्स की लड़ाई: PSR-0 बनाम PSR-4

ऑटोलॉडर्स की लड़ाई: PSR-0 बनाम PSR-4

2025-03-25 को पोस्ट किया गया
ब्राउज़ करें:856

ऑटोलॉडर्स की लड़ाई: PSR-0 बनाम PSR-4

चाबी छीनना

    ] ] यह भी सुनिश्चित करता है कि ऑटोलॉडर्स को अपवादों को कभी नहीं फेंकना चाहिए या त्रुटियों को नहीं बढ़ाना चाहिए, कई ऑटोलॉडर्स के साथ संगतता बनाए रखना चाहिए।
  • ]
  • ]
  • PSR-0
  • ] उदाहरण के लिए, क्लास \ zend \ mail \ संदेश का नेतृत्व/path/to/project/lib/vendor/zend/mail/message.php.
  • ] Zend_mail_message भी /path/path/to/project/lib/vendor/zend/mail/message.php.
  • को ले जाएगा।
संगीतकार

जब संगीतकार ने दिखाया और तूफान से PHP पैकेज प्रबंधन की दुनिया को ले लिया, तो चीजें बदल गईं। इसके कुछ नियमों के कारण, फ़ोल्डर्स अक्सर डुप्लिकेट किए जाते हैं और संगीतकार के माध्यम से PSR-0 क्लास इंस्टॉलेशन को देखते हुए बहुत गहरा हो जाते हैं। उदाहरण के लिए, कुछ फ़ोल्डर संरचनाएं इस तरह समाप्त हो गईं:

विक्रेता/ vendor_name/ package_name/ एसआरसी/ Vendor_name/ Package_name/ Classname.php # vendor_name \ package_name \ classname परीक्षण/ Vendor_name/ Package_name/ Classnametest.php # vernor_name \ package_name \ classnametest

यह सबसे अच्छा अराजक है, क्योंकि:

] यह PSR-0 अनुपालन की एक विरूपण साक्ष्य है।

]

psr-4

] यह हो सकता है, लेकिन नहीं करना है PSR-4 का मुख्य लक्ष्य PSR-0 के अवशेषों और पूर्व-पूर्व-पूर्व-पूर्व को पूरी तरह से हटाना है, और अधिक संक्षिप्त फ़ोल्डर संरचना के लिए अनुमति देता है। PSR-4 के साथ, उपरोक्त फ़ोल्डर ट्री इस तरह दिखेगा:
vendor/
    vendor_name/
        package_name/
            src/
                Vendor_Name/
                    Package_Name/
                        ClassName.php       # Vendor_Name\Package_Name\ClassName
            tests/
                Vendor_Name/
                    Package_Name/
                        ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest
विक्रेता/ vendor_name/ package_name/ एसआरसी/ Classname.php # vendor_name \ package_name \ classname परीक्षण/ Classnametest.php # vernor_name \ package_name \ classnametest

PSR-0 को अपग्रेड करना एक विकल्प नहीं था

]

] हम PSR-4 पैकेज-ओरिएंटेड ऑटोलोडिंग कहते हैं, क्योंकि यह सादगी से पहले पैकेज की सफाई का पक्षधर है।

चुना हुआ दृष्टिकोण

] ] ] यदि विफलता के बारे में अतिरिक्त जानकारी की आवश्यकता है, तो किसी को PSR-3 संगत लकड़हारा या अन्य मनमाना साधनों का उपयोग करना चाहिए।

]

/पथ/to/पैकेज/foo-bar/ एसआरसी/ Baz.php # foo \ bar \ baz Qux/ Quux.php # foo \ bar \ qux \ quux परीक्षण/ Baztest.php # foo \ bar \ baztest Qux/ Quuxtest.php # foo \ bar \ qux \ quuxtest

इस तरह दिखेंगे:
vendor/
    vendor_name/
        package_name/
            src/
                ClassName.php       # Vendor_Name\Package_Name\ClassName
            tests/
                ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest
php // लोडर को इंस्टेंट करें $ लोडर = new \ example \ psr4autoloaderclass; // ऑटोलॉडर को पंजीकृत करें $ लोडर-> रजिस्टर (); // नेमस्पेस उपसर्ग के लिए आधार निर्देशिकाओं को पंजीकृत करें $ लोडर-> addnamespace ('foo \ bar', '/path/to/packages/foo-bar/src'); $ लोडर-> addnamespace ('foo \ bar', '/path/to/packages/foo-bar/tests');

] पहले पंजीकृत निर्देशिका से लोड करने का प्रयास करेंगे, जबकि नया \ foo \ bar \ qux \ quuxtest; दूसरे से लोड करने का प्रयास करेंगे।

]
निष्कर्ष

ऑटोलोडिंग में कोई चांदी की गोली नहीं है। प्रत्येक दृष्टिकोण अपने आप को कुछ पेशेवरों और विपक्षों के साथ लाता है-PSR-4 सरल फ़ोल्डर संरचनाओं के लिए अनुमति देगा, लेकिन हमें पूरी तरह से योग्य नाम को देखकर एक वर्ग के सटीक पथ को जानने से रोकेगा। दूसरी ओर PSR-0 हार्ड ड्राइव पर अराजक है, लेकिन उन डेवलपर्स का समर्थन करता है जो अतीत (अंडरस्कोर-इन-क्लास-नाम उपयोगकर्ताओं) में फंस गए हैं और हमें केवल इसके नाम को देखकर एक वर्ग के स्थान को समझने में मदद करते हैं।

आप PSR-4 के बारे में कैसा महसूस करते हैं? हमें नीचे टिप्पणियों में बताएं, या कई बहसों में से एक में अपनी राय व्यक्त करें।

] यदि औपचारिक रूप से एक मानक के रूप में स्वीकार नहीं किया जाता है, तो कस्टम उन लोगों द्वारा लागू किया जाता है जिन्हें इसकी आवश्यकता होती है। यह चर्चा में शामिल होने और इस औपचारिक स्थिति तक पहुंचने के लिए पर्याप्त धारणा में सुधार करना है।

]

PSR-0 और PSR-4 के बीच मुख्य अंतर क्या है? PSR-0 को नामस्थान और निर्देशिका संरचना के बीच एक प्रत्यक्ष संबंध की आवश्यकता होती है, जिसका अर्थ है कि नेमस्पेस में प्रत्येक अंडरस्कोर एक निर्देशिका विभाजक से मेल खाता है। दूसरी ओर, PSR-4 एक अधिक लचीले दृष्टिकोण के लिए अनुमति देता है, जहां नेमस्पेस के एक हिस्से को किसी भी निर्देशिका में मैप किया जा सकता है, और बाकी नामों को सबडायरेक्टरी संरचना में मैप किया जा सकता है। PSR-0 के नामस्थान और निर्देशिका संरचना के बीच सख्त सहसंबंध ने गहराई से नेस्टेड निर्देशिकाओं को जन्म दिया, जो हमेशा व्यावहारिक या कुशल नहीं था। PSR-4 एक अधिक लचीला दृष्टिकोण प्रदान करता है, जिससे डेवलपर्स को किसी भी निर्देशिका में नाम स्थानों को मैप करने की अनुमति मिलती है, जिससे गहरी निर्देशिका नेस्टिंग की आवश्यकता कम हो जाती है। हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि उनका उपयोग समान वर्गों को ऑटोलोड करने के लिए नहीं किया जाना चाहिए। दोनों मानकों का उपयोग बड़ी परियोजनाओं में लाभकारी हो सकता है जहां कुछ विरासत कोड PSR-0 मानक का अनुसरण करता है, जबकि नया कोड PSR-4 मानक का अनुसरण करता है। यह डेवलपर्स को किसी भी निर्देशिका के लिए नेमस्पेस के एक हिस्से को मैप करने की अनुमति देता है, जिससे डीप डायरेक्टरी नेस्टिंग की आवश्यकता कम हो जाती है। इससे परियोजना की निर्देशिका संरचना का प्रबंधन और नेविगेट करना आसान हो जाता है। इसका मतलब यह है कि जबकि यह अभी भी कार्यात्मक है, यह नई परियोजनाओं में उपयोग के लिए अनुशंसित नहीं है। PSR-4 php में ऑटोलोडिंग के लिए अनुशंसित मानक है। Namespace के बाकी हिस्सों को तब उपनिर्देशिका संरचना में मैप किया जाता है। यह Autoloading के लिए अधिक लचीला और कुशल दृष्टिकोण के लिए अनुमति देता है।

PSR-4 का उपयोग करने के क्या लाभ हैं? यह PHP में Autoloading के लिए अनुशंसित मानक भी है, जिससे यह नई परियोजनाओं के लिए एक अच्छा विकल्प बन जाता है। PSR-4 में, नेमस्पेस के एक हिस्से को किसी भी निर्देशिका में मैप किया जा सकता है, और बाकी नामस्थान को उपनिर्देशिका संरचना में मैप किया जा सकता है। इसके लिए आपकी परियोजना की निर्देशिका संरचना का पुनर्गठन की आवश्यकता हो सकती है। यदि आप PHP के एक पुराने संस्करण का उपयोग कर रहे हैं, तो आपको PSR-4 का उपयोग करने के लिए अपग्रेड करने की आवश्यकता होगी।

PHP में ऑटोलोडिंग का भविष्य क्या है? हालांकि, भविष्य के भविष्य के लिए, PSR-4 Php में ऑटोलोडिंग के लिए अनुशंसित मानक है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3