PSR-0
يدعم PSR-0 أيضًا عمليات السد في أسماء الفصول كبديل ، لإجراء الانتقال من 5.2 وأسهل. zend_mail_message سيؤدي أيضًا إلى/path/to/project/lib/vendor/zend/mail/message.php. budap&&&]
Composerعندما ظهر الملحن وأخذ عالم إدارة حزم PHP عن طريق العاصفة ، تغيرت الأمور. نظرًا لبعض قواعدها ، غالبًا ما يتم تكرار المجلدات وأصبحت عميقة جدًا عند النظر إلى منشآت فئة PSR-0 عبر الملحن. على سبيل المثال ، انتهت بعض هياكل المجلدات مثل هذا:
هذا فوضوي في أحسن الأحوال ، لأنه:
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
يجب أن تضمن أدلة "SRC" و "الاختبارات" أسماء الدليل البائع وحزم. هذا هو قطعة أثرية من الامتثال PSR-0.
PSR-4لذلك ، اجتمعت بعض PHP Devs المؤهلين تأهيلا عاليا وجمعوا اقتراحًا لمعايير جديدة: PSR-4.
يهدف PSR-4 إلى تكملة والعمل مع PSR-0 عند الضرورة ، لا تحل محله بالكامل. يمكن ، ولكن ليس من الضروري. الهدف الرئيسي من PSR-4 هو إزالة بقايا PSR-0 وما قبل 5.3 أيام تمامًا ، والسماح ببنية مجلد أكثر إيجازًا. مع PSR-4 ، ستبدو شجرة المجلد أعلاه كما هي:
لم تكن ترقية PSR-0 خيارًا
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
لأن PSR-0 لا يسمح بمسار شفري بين أي أجزاء من اسم الفصل
النهج المختارهذا أمر مهم للغاية-فهذا يعني أن تنفيذ PSR-4 ، مع السماح بحزم أنظف ، سيكون أكثر تعقيدًا. نحن نسمي التحميل التلقائي الموجهة نحو حزمة PSR-4 ، لأنه يفضل النظافة قبل البساطة.
الأهداف المقترحة هي كما يلي: حافظ على قاعدة PSR-0 التي يجب أن تحتوي جميع الحزم على مستويين على الأقل من مساحة الاسم (البائع والحزمة) ، وتأكد من أن مجموعة الحزم للبائعين يمكن أن تخطط إلى أي مجلد ، والسماح بمجموعة من المجلدات بين المجلدات بين البائعين وبقية اسم الفئة المؤهلة بالكامل.
علاوة على ذلك ، تنص المسودة بشكل صريح على أنه يجب ألا يرمي التحميل التلقائي لـ PSR-4 أبدًا استثناءات أو يرفع أخطاء ببساطة لأنه قد يتم تسجيل أجهزة التحميل التلقائي المتعددة ، وإذا فشل المرء في تحميل فئة ، فيجب إعطاء فرصة أخرى للقيام بذلك-إلقاء خطأ وإيقاف استراحة التدفق. إذا كانت هناك حاجة إلى معلومات إضافية حول الفشل ، فيجب على المرء استخدام مسجل متوافق مع PSR-3 أو وسائل تعسفية أخرى.
كما هو موضح في ملف المثال ، باستخدام adoloader PSR-4 لتحميل الفئات من الهيكل التالي:
/path/to/packages/foo-bar/ SRC/ baz.php # foo \ bar \ baz QUX/ quux.php # foo \ bar \ qux \ Quux اختبارات/ baztest.php # foo \ bar \ baztest QUX/ quuxtest.php # foo \ bar \ qux \ quuxtest
سيبدو هكذا:
/path/to/packages/foo-bar/ src/ Baz.php # Foo\Bar\Baz Qux/ Quux.php # Foo\Bar\Qux\Quux tests/ BazTest.php # Foo\Bar\BazTest Qux/ QuuxTest.php # Foo\Bar\Qux\QuuxTest
حيث استدعاء new \ foo \ bar \ qux \ quux ؛ ستحاول التحميل من أول دليل مسجل ، في حين أن \ foo \ bar \ qux \ quuxtest ؛ ستحاول التحميل من الثانية.
register(); // register the base directories for the namespace prefix $loader->addNamespace('Foo\Bar', '/path/to/packages/foo-bar/src'); $loader->addNamespace('Foo\Bar', '/path/to/packages/foo-bar/tests');
خاتمة
لا توجد رصاصة فضية في التحميل التلقائي. كل نهج يجلب مع بعض الإيجابيات والسلبيات-سيسمح PSR-4 بهياكل مجلد أبسط ، ولكنه سيمنعنا من معرفة المسار الدقيق للفصل فقط من خلال النظر إلى الاسم المؤهل تمامًا. من ناحية أخرى ، فإن PSR-0 فوضوي على القرص الصلب ، ولكنه يدعم المطورين الذين يتعثرون في الماضي (مستخدمي الاسم السفلي في الفئران) ويساعدنا على تمييز موقع الفصل فقط من خلال النظر إلى اسمه.
في كلتا الحالتين-لا يوجد شك في التحميل التلقائي الموجهة نحو الحزمة هنا للبقاء. إذا لم يتم قبولها رسميًا كمعيار ، فسيتم تنفيذها حسب الطلب من قبل الأشخاص الذين يحتاجون إليها. الأمر متروك لنا للانضمام إلى المناقشة وتحسين الفكرة بما يكفي للوصول إلى هذه الحالة الرسمية.
كثيراً ما يتم طرح أسئلة حول PSR-0 و PSR-4 Autoloading
ما هو الفرق الرئيسي بين PSR-0 و PSR-4؟ يتطلب PSR-0 ارتباطًا مباشرًا بين مساحات الأسماء وهيكل الدليل ، مما يعني أن كل منهما يتوافق مع مساحة الاسم مع فاصل دليل. من ناحية أخرى ، يسمح PSR-4 بنهج أكثر مرونة ، حيث يمكن تعيين جزء من مساحة الاسم إلى أي دليل ، ويمكن تعيين بقية مساحة الاسم إلى بنية الدليل الفرعي. أدت العلاقة الصارمة لـ PSR-0 بين مساحات الأسماء وهيكل الدليل إلى أدلة متداخلة بعمق ، والتي لم تكن عملية أو فعالة دائمًا. يوفر PSR-4 نهجًا أكثر مرونة ، مما يسمح للمطورين برسم أسماء الأسماء إلى أي دليل ، مما يقلل من الحاجة إلى تعشش الدليل العميق. ومع ذلك ، من المهم أن نلاحظ أنه لا ينبغي استخدامها لتحميل نفس الفئات. يمكن أن يكون استخدام كلا المعيارين مفيدًا في المشاريع الكبيرة حيث تتبع بعض التعليمات البرمجية القديمة معيار PSR-0 ، في حين أن التعليمات البرمجية الأحدث تتبع معيار PSR-4. يتيح للمطورين تعيين جزء من مساحة الاسم إلى أي دليل ، مما يقلل من الحاجة إلى تعشيش الدليل العميق. هذا يجعل من الأسهل إدارة وتنقل بنية دليل المشروع.
ما هي فوائد استخدام PSR-4؟ إنه أيضًا المعيار الموصى به للتحويل التلقائي في PHP ، مما يجعله خيارًا جيدًا للمشاريع الجديدة.
هل يمكنني استخدام PSR-4 في إصدارات PHP الأقدم؟
إذا كنت تستخدم إصدارًا أقدم من PHP ، فستحتاج إلى الترقية من أجل استخدام PSR-4.تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3