ما بعد البادئة: دليل مطور WordPress إلى PHP Namespaces

نشرت: 2019-11-12

بادئة كل شيء.

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

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

البادئة هي أحد أشكال "تباعد الأسماء" ، وهي مجرد طريقة رائعة لقول أن الأسماء في هذه المساحة تنتمي إلى مشروع معين. ومع ذلك ، فإن البادئة (واللاحقة ، وهي أقل شيوعًا) هي اختراق من وقت لم يكن فيه حل للغة PHP.

قدمت PHP 5.3 طريقة رسمية للمسافات بين الأسماء ، لذا فإن المعيار موجود منذ سنوات. نظرًا لأن WordPress 5.2 تجاوز الحد الأدنى لمتطلبات PHP إلى 5.6 ، فقد حان الوقت للمطورين للتخلي عن عاداتهم القديمة واللحاق بباقي عالم PHP.

مساحة الاسم (تقريبًا) كل شيء

مساحة أسماء PHP تغطي العناصر التالية فقط.

  • الطبقات
  • واجهات
  • الصفات
  • المهام
  • تم تعريف الثوابت بالكلمة الأساسية const ولكن لم يتم define()

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

كيفية إنشاء مساحات الأسماء

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

 <؟ php

حانة مساحة الاسم؛

ما يفعله هذا السطر من التعليمات البرمجية هو التصريح بأن كل شيء داخل هذا الملف المحدد له مساحة اسم Tavern .

ألقِ نظرة على وظيفة بسيطة ضمن مساحة الاسم هذه لإخراج Hello, World! رسالة.

 <؟ php

حانة مساحة الاسم؛

الوظيفة مرحبًا () {
    _e ("Hello، World!"، "example-textdomain")؛
}

إذا كنت تتبع القواعد القديمة للبادئة ، فسيتم تسمية hello() باسم tavern_hello() . ومع ذلك ، هذا ليس هو الحال مع مساحات الأسماء. يتم تغليف الوظيفة hello() داخل مساحة اسم Tavern ولن تتعارض مع الوظائف الأخرى المسماة hello() .

تعمل الفصول والواجهات بنفس الوظائف. باستخدام اسم فئة Article ، قد يبدو ملف الفصل كما يلي.

 <؟ php

حانة مساحة الاسم؛

مقالة الفصل {
    // ...
}

ملاحظة: يجب ألا يكون هناك سوى فئة واحدة أو واجهة واحدة لكل ملف. هذا مهم بشكل خاص إذا كنت تخطط لاستخدام أداة التحميل التلقائي.

كيفية تسمية مساحات الأسماء

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

لنفترض أن مساحة اسم البائع كانت Tavern وأن المشروع المعني كان موضوع WordPress باسم News . قد تبدو مساحة اسم المشروع كما يلي.

 <؟ php

مساحة الاسم Tavern \ News؛

قد يكون هذا مطولًا بعض الشيء لبعض المطورين. إذا كان اسم مشروعك فريدًا بالفعل ، مثل "Awesomesauce" ، فقد ترغب ببساطة في استخدام ما يلي.

 <؟ php

مساحة الاسم Awesomesauce ؛

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

استيراد الفئات والوظائف إلى مساحة اسم مختلفة

عندما تحتاج إلى استخدام فئة أو وظيفة من مساحة اسم مختلفة عن مساحة الاسم الحالية ، فأنت بحاجة إلى استيرادها. يتم ذلك عن طريق use الكلمة الأساسية في PHP.

يجب أن يأتي بيان use بعد إعلان namespace . يجب أن يشير أيضًا إلى اسم الفئة المؤهلة بالكامل. يستورد الكود التالي فئة Tavern\Helpers\Post إلى ملف بمساحة اسم مختلفة.

 <؟ php

مساحة الاسم Tavern \ Template ؛

استخدام Tavern \ Helpers \ Post ؛

بمجرد استيراده ، يمكنك استخدام فئة Post مباشرةً كما هو موضح في المقتطف التالي بأمان.

 وظيفة $ = وظيفة جديدة () ؛

بدءًا من PHP 5.6 ، يمكنك أيضًا استيراد الوظائف والثوابت من مساحات الأسماء الأخرى باستخدام use function use const ، على التوالي. يوضح مقطع التعليمات البرمجية التالي كيفية استيراد كل من دالة وثابت.

 <؟ php

مساحة الاسم Tavern \ Template ؛

استخدام الوظيفة Tavern \ Helpers \ func_name ؛
استخدام const Tavern \ Helpers \ CONSTANT_NAME ؛

فئات والوظائف المستعارة

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

لنفترض أن لديك فئة باسم Tavern\User وتحتاج إلى تنفيذ واجهة Tavern\Contracts\User . عند استيراد الواجهة ، ستحتاج إلى إنشاء اسم مستعار كما هو موضح أدناه.

 <؟ php

حانة مساحة الاسم؛

استخدام Tavern \ Contracts \ User كعقد مستخدم ؛

ينفذ مستخدم فئة UserContract {
    // ...
}

يؤدي إضافة as UserContract إلى نهاية عبارة use إلى إنشاء اسم مستعار لواجهة User . يمكنك استخدام اسم UserContract الجديد بأمان بدون أخطاء.

تتبع الفئات والواجهات والوظائف والثوابت نفس الطريقة لإنشاء اسم مستعار.

تنظيم بنية المجلد بناءً على مساحات الأسماء

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

بشكل عام ، يجب أن تنتقل كل أكواد PHP إلى a /src أو /inc أو مجلد مشابه له في مشروعك. قد تبدو بنية الملف والمجلد كمثال على النحو التالي.

 / اسم البرنامج المساعد
    / src
        /النواة
            /Activate.php
            /Setup.php
        /رأي
            / Post.php
            /Page.php

إذا اتبعت نفس البنية مع مساحات الأسماء ، فستحتوي ملفات .php أعلاه على الفئات التالية.

  • Tavern\Core\Activate
  • Tavern\Core\Setup
  • Tavern\View\Post
  • Tavern\View\Page

لاحظ أن أسماء الملفات والمجلدات حساسة لحالة الأحرف ويجب أن تتطابق تمامًا مع مساحة الاسم واسم الفئة.

بالطبع ، لك مطلق الحرية في اتباع أي اتفاقية ترغب فيها. ومع ذلك ، فإن التوصية السابقة هي ممارسة جيدة وستعمل على تبسيط كيفية تنظيم مشاريعك على المدى الطويل.

فوائد استخدام مساحات الأسماء

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

تساعد مساحات الأسماء على تجنب أسماء الفئات الطويلة. تعد كتابة الأسماء الطويلة في جميع أنحاء مشروع كبير ممارسة شاقة في أحسن الأحوال.

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

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

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