2016-07-31 9 views
8

लार्वेल के संबंध में, मुझे संगीतकार ऑटोलोडिंग के बारे में एक प्रश्न मिला, यानी "psr-4" और "classmap" autoloading के बीच का अंतर।पीएसआर -4 और क्लासमैप ऑटोलोडिंग के बीच अंतर?

1 अंतर यह है कि मैं जानता हूँ कि PSR-4 हर परिवर्तन या जबकि classmap वर्ग या निर्दिष्ट निर्देशिका में नई फ़ाइल के अलावा युक्त मौजूदा फ़ाइलों में प्रत्येक परिवर्तन के लिए dumpautoload की जरूरत है नई फ़ाइलें के अलावा के लिए बार-बार की जरूरत नहीं है करता dumpautoload है।

उत्तर

21

पीएसआर -4 मानक आपको नामस्थानों के आधार पर एक सख्त फाइल सिस्टम संरचना की आवश्यकता है। मान लें कि src निर्देशिका में App नामस्थान के साथ एक ऐप है, तो सभी उप-नामस्थान उपनिर्देशिका दर्पण करेंगे और कक्षा के नाम .php एक्सटेंशन के बिना फ़ाइल नामों के समान होंगे।

{ 
    "autoload": { 
     "psr-4": { "App\\": "src/" } 
    } 
} 

src/ 
    Foo/ 
     Bar.php <---- App\Foo\Bar class 
    Baz.php <---- App\Baz class 

autoloader तो "जानता" जहां एक निश्चित पूरी तरह से योग्य नाम के वर्ग के लिए देखने के लिए और इसलिए कक्षाओं के लिए फ़ाइलों को सूंघना डंप-autoload आदेश की आवश्यकता नहीं है।

प्रदर्शन मुद्दों को composer dump-autoload --optimize-autoloader ध्वज, या -o के साथ हल किया जाता है, जो क्लासमैप ऑटोलोडिंग के समान तरीके से क्लास मैप उत्पन्न करेगा।


दूसरी ओर, classmap autoloading लगभग किसी भी निश्चित फ़ाइल या निर्देशिका संरचना है करने की आवश्यकता नहीं है, यह रिकर्सिवली निर्दिष्ट निर्देशिका और फाइल में .php और .inc फ़ाइलों के माध्यम से जाने के लिए और उन में कक्षाओं के लिए सूंघ जाएगा ।

{ 
    "autoload": { 
     "classmap": ["src/", "lib/", "Something.php"] 
    } 
} 

उन वर्गों तो एक सूची (विक्रेता/संगीतकार निर्देशिका में PHP फ़ाइल में कैश) जो autoloading के लिए प्रयोग किया जाता है करने के लिए जोड़ रहे हैं।

किसी भी नए वर्ग को composer dump-autoload आदेश चलाकर उस सूची में जोड़ा जाना चाहिए।

+0

कक्षा के बिना सादे PHP फ़ाइलों के बारे में क्या? जैसे वैश्विक कार्यों के समूह के साथ सिर्फ एक php फ़ाइल, इसे कैसे जोड़ना है? – Toskan

+1

@Toskan https://getcomposer.org/doc/04-schema.md#files देखें – Finwe

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