"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > Battle of the Autoloaders: PSR-0 مقابل PSR-4

Battle of the Autoloaders: PSR-0 مقابل PSR-4

نشر في 2025-03-25
تصفح:163

Battle of the Autoloaders: PSR-0 مقابل PSR-4

مفتاح الوجبات السريعة

  • PSR-0 و PSR-4 هما معايير التحميل التلقائي في PHP ، مع تحديد مسارات PSR-0 بناءً على مساحة اسم الفئة والسماح بسد في أسماء الفصول الدراسية ، بينما يهدف PSR-4 إلى تبسيط بنية المجلد وإزالة بقايا PSR-0.
  • ]
  • PSR-4 ، المشار إليها باسم التحميل التلقائي الموجهة نحو الحزمة ، يسمح بحزم أنظف ولكنه أكثر تعقيدًا للتنفيذ. كما يضمن عدم إلقاء أدوات التحميل التلقائي على الاستثناءات أو رفع الأخطاء ، أو الحفاظ على التوافق مع التحميل التلقائي المتعددة.
  • على حد سواء PSR-0 و PSR-4 لهما إيجابيات وسلبياتهما: يسمح PSR-4 بهياكل مجلدات أبسط ولكن لا يُظهر المسار الدقيق لفئة من اسمه المؤهل تمامًا ، في حين أن PSR-0 يمكن أن يكون فوضويًا ولكنه يدعم المطورين باستخدام اتفاقيات التسمية القديمة والمساعدات في تحديد موقع فئة من اسمها.
إذا تجاوزت مرحلة المبتدئين في تدريب PHP الخاص بك ، فقد سمعت عن PSR-0-معيار التحميل التلقائي الذي يحدد طرقًا لتضمين فئات PHP تلقائيًا في الكود الخاص بك دون الحاجة إلى استخدام عبارات مثل الطلب وتضمين.

PSR-0

PSR-0 ينظر إلى مساحة اسم الفصل ويميز موقعه على القرص الصلب من هذا الجزء من المعلومات. على سبيل المثال ، ستؤدي الرسالة \ zend \ mail \ إلى/path/to/project/lib/vendor/zend/mail/message.php. budap&&&]

يدعم PSR-0 أيضًا عمليات السد في أسماء الفصول كبديل ، لإجراء الانتقال من 5.2 وأسهل. zend_mail_message سيؤدي أيضًا إلى/path/to/project/lib/vendor/zend/mail/message.php. budap&&&]

Composer

عندما ظهر الملحن وأخذ عالم إدارة حزم PHP عن طريق العاصفة ، تغيرت الأمور. نظرًا لبعض قواعدها ، غالبًا ما يتم تكرار المجلدات وأصبحت عميقة جدًا عند النظر إلى منشآت فئة PSR-0 عبر الملحن. على سبيل المثال ، انتهت بعض هياكل المجلدات مثل هذا:

بائع/ بائع _name/ package_name/ SRC/ بائع _name/ package_name/ className.php # Pendor_Name \ package_name \ className اختبارات/ بائع _name/ package_name/ classnametest.php # pendor_name \ package_name \ classnametest

هذا فوضوي في أحسن الأحوال ، لأنه:
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.

لذلك ، اجتمعت بعض PHP Devs المؤهلين تأهيلا عاليا وجمعوا اقتراحًا لمعايير جديدة: PSR-4.

PSR-4

يهدف PSR-4 إلى تكملة والعمل مع PSR-0 عند الضرورة ، لا تحل محله بالكامل. يمكن ، ولكن ليس من الضروري. الهدف الرئيسي من PSR-4 هو إزالة بقايا PSR-0 وما قبل 5.3 أيام تمامًا ، والسماح ببنية مجلد أكثر إيجازًا. مع PSR-4 ، ستبدو شجرة المجلد أعلاه كما هي:

بائع/ بائع _name/ package_name/ SRC/ className.php # Pendor_Name \ package_name \ className اختبارات/ classnametest.php # pendor_name \ package_name \ classnametest

لم تكن ترقية 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 التي يجب أن تحتوي جميع الحزم على مستويين على الأقل من مساحة الاسم (البائع والحزمة) ، وتأكد من أن مجموعة الحزم للبائعين يمكن أن تخطط إلى أي مجلد ، والسماح بمجموعة من المجلدات بين المجلدات بين البائعين وبقية اسم الفئة المؤهلة بالكامل.

هذا يعني أننا سنكون قادرين على وضع فصولنا في أي مكان في رمز الحزمة حيث يكون من المنطقي لنا كبشر ، وما زلنا نستخدمها بسلاسة في PHP دون كتابة تقنيات تحميل بديلة أو اللجوء إلى التحميل اليدوي.

علاوة على ذلك ، تنص المسودة بشكل صريح على أنه يجب ألا يرمي التحميل التلقائي لـ 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-4؟ أخبرنا في التعليقات أدناه ، أو التعبير عن رأيك في أحد المناقشات العديدة.

في كلتا الحالتين-لا يوجد شك في التحميل التلقائي الموجهة نحو الحزمة هنا للبقاء. إذا لم يتم قبولها رسميًا كمعيار ، فسيتم تنفيذها حسب الطلب من قبل الأشخاص الذين يحتاجون إليها. الأمر متروك لنا للانضمام إلى المناقشة وتحسين الفكرة بما يكفي للوصول إلى هذه الحالة الرسمية.

كثيراً ما يتم طرح أسئلة حول PSR-0 و PSR-4 Autoloading

ما هو الفرق الرئيسي بين PSR-0 و PSR-4؟ يتطلب PSR-0 ارتباطًا مباشرًا بين مساحات الأسماء وهيكل الدليل ، مما يعني أن كل منهما يتوافق مع مساحة الاسم مع فاصل دليل. من ناحية أخرى ، يسمح PSR-4 بنهج أكثر مرونة ، حيث يمكن تعيين جزء من مساحة الاسم إلى أي دليل ، ويمكن تعيين بقية مساحة الاسم إلى بنية الدليل الفرعي. أدت العلاقة الصارمة لـ PSR-0 بين مساحات الأسماء وهيكل الدليل إلى أدلة متداخلة بعمق ، والتي لم تكن عملية أو فعالة دائمًا. يوفر PSR-4 نهجًا أكثر مرونة ، مما يسمح للمطورين برسم أسماء الأسماء إلى أي دليل ، مما يقلل من الحاجة إلى تعشش الدليل العميق. ومع ذلك ، من المهم أن نلاحظ أنه لا ينبغي استخدامها لتحميل نفس الفئات. يمكن أن يكون استخدام كلا المعيارين مفيدًا في المشاريع الكبيرة حيث تتبع بعض التعليمات البرمجية القديمة معيار PSR-0 ، في حين أن التعليمات البرمجية الأحدث تتبع معيار PSR-4. يتيح للمطورين تعيين جزء من مساحة الاسم إلى أي دليل ، مما يقلل من الحاجة إلى تعشيش الدليل العميق. هذا يجعل من الأسهل إدارة وتنقل بنية دليل المشروع.

هل تم إهمال PSR-0؟ هذا يعني أنه على الرغم من أنه لا يزال وظيفيًا ، إلا أنه لا ينصح بالاستخدام في مشاريع جديدة. PSR-4 هو المعيار الموصى به للتحميل التلقائي في PHP.

كيف يعمل التحميل التلقائي في PSR-4؟ ثم يتم تعيين بقية مساحة الاسم إلى بنية الدليل الفرعي. هذا يسمح بنهج أكثر مرونة وفعالية في التحميل التلقائي.

ما هي فوائد استخدام PSR-4؟ إنه أيضًا المعيار الموصى به للتحويل التلقائي في PHP ، مما يجعله خيارًا جيدًا للمشاريع الجديدة.

كيف يمكنني الترحيل من PSR-0 إلى PSR-4؟ في PSR-4 ، يمكن تعيين جزء من مساحة الاسم إلى أي دليل ، ويمكن تعيين بقية مساحة الاسم إلى بنية الدليل الفرعي. قد يتطلب هذا إعادة هيكل دليل دليل مشروعك.

هل يمكنني استخدام PSR-4 في إصدارات PHP الأقدم؟

إذا كنت تستخدم إصدارًا أقدم من PHP ، فستحتاج إلى الترقية من أجل استخدام PSR-4.

ما هو مستقبل التحميل التلقائي في PHP؟ ومع ذلك ، بالنسبة للمستقبل المتوقع ، فإن PSR-4 هو المعيار الموصى به للتحميل التلقائي في PHP.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3