مقدمة لتوصيات PHP القياسية (PSR)

نشرت: 2019-12-24

ذات مرة ، في أحد المؤتمرات ، جلس المطورون الرئيسيون من مجموعة مختارة من الأطر في نفس الغرفة واتفقوا على بعض المعايير لجميع مشاريعهم لاستخدامها. كان الهدف هو تسهيل دمج أطر عمل PHP والمكتبات للمستخدمين. كان ذلك عندما ولدت php-fig: PHP Framework Interop Group. تشرف هذه المجموعة من الأفراد الرائعين على توصيات معايير PHP (PSR).


توصية PHP القياسية (PSR) هي إحدى مواصفات PHP التي تنشرها PHP Framework Interoperability Group (PHP-FIG). يخدم توحيد مفاهيم البرمجة في PHP. الهدف هو تمكين التشغيل البيني للمكونات. يتكون PHP-FIG من قبل العديد من مؤسسي أطر PHP.

PSR-0 & PSR-4

يصف هذا مواصفات لفئات التحميل التلقائي من مسارات الملفات. PSR-0 و PSR-4 كلاهما معياران يتعلقان بمساحات الأسماء وأسماء الفئات ومسارات الملفات. يصف PSR هذا أيضًا مكان وضع الملفات التي سيتم تحميلها تلقائيًا وفقًا للمواصفات.

تحميل تلقائي

التحميل التلقائي هو وظيفة لمساعدة المطورين بما في ذلك فئات PHP تلقائيًا دون كتابة تعليمات التضمين / الطلب المزدحمة في كل مكان.
في PHP ، يتم تحميل تعريف الفئة بعبارات تتطلب أو تشمل في الملفات التي يطلق عليها ، أي قبل استخدامها كما هو موضح أدناه.

صورة psr 1

يثير النهج أعلاه بعض المشكلات كما لو كان لدينا عشرات الفئات الخارجية لاستخدامها في ملف ونبدأ في كتابة سطور من عبارات تتطلب / تضمين في بداية الملف المصدر مباشرةً.

للتغلب على هذه المشكلة ، قدم PHP 5 الوظيفة السحرية __autoload () والتي يتم استدعاؤها تلقائيًا عندما يشير الرمز الخاص بك إلى فئة أو واجهة لم يتم تحميلها بعد.

صورة 2

فيما يلي مثال على تنفيذ __autoload () الأساسي:

صورة_ psr3

العيب الرئيسي لوظيفة __autoload () هو أنه يمكنك فقط توفير أداة تحميل تلقائي واحدة معها. قدمت PHP 5.1.2 وظيفة أخرى للتحميل التلقائي (spl_autoload_register) للتعامل مع قيود __autoload.

أعطى إدخال spl_autoload_register () للمبرمجين القدرة على إنشاء سلسلة تحميل تلقائي ، وهي سلسلة من الوظائف التي يمكن استدعاؤها لمحاولة تحميل فئة أو واجهة.

فمثلا:

psr_image4صورة_ psr5

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

PSR-0 (معيار التحميل التلقائي)

نظرة عامة على PSR-0:

  • يجب أن تحتوي مساحة الاسم والفئة المؤهلة بالكامل على البنية التالية
    \ <اسم البائع> \ (<مساحة الاسم> \) * <اسم الفئة>
  • يجب أن تحتوي كل مساحة اسم على مساحة اسم ذات مستوى أعلى ("اسم البائع").
  • يمكن أن تحتوي كل مساحة اسم على العديد من مساحات الأسماء الفرعية كما تشاء.
  • يتم تحويل كل فاصل لمساحة الأسماء إلى DIRECTORY_SEPARATOR عند التحميل من نظام الملفات.
  • يتم تحويل كل حرف _ في CLASS NAME إلى DIRECTORY_SEPARATOR. ليس للحرف _ أي معنى خاص في مساحة الاسم.
  • يتم إلحاق مساحة الاسم والفئة المؤهلة بالكامل بـ .php عند التحميل من نظام الملفات.
  • قد تكون الأحرف الأبجدية في أسماء البائعين ومساحات الأسماء وأسماء الفئات من أي مجموعة من الأحرف الصغيرة والكبيرة.

أمثلة:

\ Doctrine \ Common \ IsolatedClassLoader =>
/path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php

\ Symfony \ Core \ Request =>
/path/to/project/lib/vendor/Symfony/Core/Request.php

PSR-4 (معيار التحميل التلقائي)

نظرة عامة على PSR-4:

  • يشير مصطلح "فئة" إلى الفئات والواجهات والسمات والبنى الأخرى المماثلة.
  • يحتوي اسم الفئة المؤهل بالكامل على الشكل التالي:
    \ <اسم مساحة الاسم> (\ <مساحة_الأسماء الفرعية>) * \ <اسم_الفئة>
  • يجب أن يحتوي اسم الفئة المؤهلة بالكامل على اسم مساحة اسم من المستوى الأعلى ، يُعرف أيضًا باسم "مساحة اسم البائع".
  • قد يحتوي اسم الفئة المؤهل بالكامل على واحد أو أكثر من أسماء مساحات الاسم الفرعية.
  • يجب أن يحتوي اسم الفئة المؤهلة بالكامل على اسم فئة إنهاء.
  • ليس للشرطات السفلية أي معنى خاص في أي جزء من اسم الفئة المؤهل بالكامل.
  • قد تكون الأحرف الأبجدية في اسم الفئة المؤهل بالكامل أي مجموعة من الأحرف الصغيرة والكبيرة.
  • يجب الإشارة إلى جميع أسماء الفئات بطريقة حساسة لحالة الأحرف.

مثال على التحميل التلقائي المستند إلى PSR-4 باستخدام Composer:

  • ضع في اعتبارك بنية الدليل التالية لتحقيق التحميل التلقائي المستند إلى PSR-4 باستخدام الملحن.
صورة_ psr6
  • قم بإنشاء ملف composer.json باستخدام الملحن init. إذا لم يكن كذلك ، يمكنك إنشاء واحد يدويًا الآن في جذر مشروعك.
صورة_ psr7
  • قم بإعداد التحميل التلقائي لـ PSR4 عن طريق تحرير ملف composer.json كما هو موضح أدناه:
psr_image8
  • هنا ، CodeCourse هو اسم بائع لتطبيقك ، يمكنك استخدام هذا الاسم أثناء تباعد أسماء الملفات داخل دليل src الخاص بك ، مثل:
    صورة_ psr9

    أو

صورة_ psr10

إلخ،

  • و src هو دليل التطبيق الخاص بك الذي تريد تحميله تلقائيًا.
  • بعد ذلك ، افتح الجهاز الطرفي واكتب الأمر التالي لتثبيت ملفات التحميل التلقائي في مشروعك ، سيؤدي هذا إلى إنشاء دليل البائع وملف autoload.php بداخله.
صورة_ psr11
  • لنقم أولاً بإنشاء فئتين داخل دليل CodeCourse.

قم بإنشاء AuthFilters.php داخل CodeCourse / Filters

صورة_ psr11

قم بإنشاء UserRepository.php داخل CodeCourse / Repositories

صورة_ psr12
  • أخيرًا ، قم بإنشاء ملف index.php لاختباره وتحتاج إلى طلب ملف autoload.php مرة واحدة في ملف index.php الخاص بك.
صورة_ psr14

PSR-1 و PSR-2

PSR-1 و PSR-2 مفيدان لمعايير ترميز PHP. يركز PSR-1 بشكل أساسي على معيار التشفير الأساسي لـ PHP بينما يشبه PSR-2 نسخة موسعة من PSR-1. يسرد PSR-1 مجموعة من القواعد البسيطة لاصطلاحات التسمية ويوفر PSR-2 دليل أسلوب تشفير أكثر شمولاً.

PSR-1 (معيار الترميز الأساسي)

نظرة عامة على PSR-1:

  • مسموح فقط بعلامات PHP <؟ php أو <؟ =.
  • يجب تحديد أسماء الفئات في UpperCamelCase.
  • يجب تحديد متغيرات الفئة في حالة الجمل.
  • يجب تحديد ثوابت الفئة في UPPER_SNAKE_CASE.
  • يجب تحديد أسماء الطرق في حالة الجمل.
  • يجب أن تعلن الملفات عن الرموز (الفئات ، الوظائف ، الثوابت ، إلخ) أو تسبب آثارًا جانبية (مثل إنشاء مخرجات ، وتغيير إعدادات .ini ، وما إلى ذلك) ولكن يجب ألا تفعل كلا الأمرين. بمعنى آخر،
صورة_ psr15

المثال أعلاه يتسبب في آثار جانبية ، مثل تحميل ملف باسم "file.php".

  • يجب أن تكون الملفات بتنسيق UTF-8 بدون BOM (علامة ترتيب البايت).
  • يجب أن تتبع مساحات الأسماء وأسماء الفئات المعايير في PSR-0 و PSR-4.

هذا مثال يوضح اصطلاحات التسمية الأساسية للخصائص والفئات والطرق.

psr_image16

PSR-2 (دليل أسلوب الترميز)

نظرة عامة على PSR-2:

  • يجب عليك اتباع معايير الترميز PSR-1.
  • يجب استخدام 4 مسافات للمسافات البادئة. استخدام علامات التبويب غير مسموح به.
  • لا يوجد حد لطول السطر ، ولكن يجب أن يكون أقل من 120 حرفًا ، والأفضل إذا كان أقل من 80 حرفًا.
  • يجب أن يكون هناك سطر فارغ واحد بعد إعلان مساحة الاسم ويجب أن يكون هناك سطر فارغ واحد بعد إعلان كتلة الاستخدام.
  • يجب أن يتم فتح الأقواس المتعرجة للفئات والطرق في السطر التالي ويجب أن يتم إغلاق الأقواس المتعرجة على الخط بعد الجسم.
  • يجب تحديد الأساليب والخصائص باستخدام الملخص / النهائي أولاً ، متبوعًا بالكلمة الأساسية العامة / المحمية ، وأخيراً الكلمة الأساسية الثابتة.
  • يجب ألا تضع سطرًا جديدًا قبل الأقواس المتعرجة في العبارات الشرطية.
  • يجب ألا تضع أي مسافات قبل (و) في العبارات الشرطية.
  • مثال على تعريف الفئات:
  • يجب عليك فتح الأقواس المتعرجة على السطر الجديد ويجب استخدام الامتدادات والكلمة الأساسية للأدوات في سطر واحد.
صورة_ psr17

إذا كان هناك العديد من الواجهات المطلوب تنفيذها ، فيمكنك كتابة أسماء الواجهة في السطر الجديد كما هو موضح أدناه:

psr صورة 18

مثال لإظهار كيفية تعريف الأساليب في PHP:
أثناء تحديد الطرق ، يجب كتابة الحجج في نفس السطر. أيضًا ، يجب ألا تضع أي مسافات بيضاء قبل الفواصل في الوسيطات ، ويجب أن تضع مسافة بيضاء واحدة بعدها.

صورة_صورة 19

إذا كان هناك عدد كبير من الحجج ، فيمكن كتابتها في سطر جديد واحدًا تلو الآخر:

صورة_ psr20

عند تحديد الطرق ، يجب أن يكون لديك أحد الأساليب العامة / المحمية / الخاصة والمجردة / النهائية. تأتي أوضاع الرؤية بعد الكلمة الأساسية الخلاصة / النهائية ، إذا تم استخدامها. ثابت هو المعدل الأخير.

صورة_صورة 21

عبارات شرطية

  • يجب أن تضع مسافة بيضاء واحدة قبل (
  • يجب عدم وضع أي مسافات بيضاء بعد (
  • يجب ألا تضع أي مسافات بيضاء قبل)
  • يجب أن تضع مسافة بيضاء واحدة بعد)
  • استخدم elseif بدلاً من استخدام if.

مثال لإظهار الفرق بين elseif و else إذا:
تفسير المصطلح:

psr_ الصورة 22

تفسير الآخر إذا:

الصورة_صورة 23

بالنسبة إلى بيانات التبديل ،

  • يجب فتح الأقواس المتعرجة في نفس السطر حيث يتم كتابة بيان التبديل.
  • يجب وضع مسافة بادئة لجسم العلبة مرة واحدة من العلبة ويجب وضع مسافة بادئة للحالة مرة واحدة من المفتاح.
  • لا تستخدم استراحة عندما لا تكون هناك حاجة للكسر.
  • يمكنك أيضًا استخدام الإرجاع بدلاً من الاستراحة.

مثال:

psr_ صورة 24