يعد هذا المستودع جزءًا من مشروع Refactoring.Guru.
أنه يحتوي على أمثلة PHP لجميع أنماط تصميم GoF الكلاسيكية.
يتضمن كل نمط مثالين:
توضح الأمثلة المفاهيمية البنية الداخلية للأنماط، بما في ذلك التعليقات التفصيلية.
توضح أمثلة RealWorld كيف يمكن استخدام الأنماط في تطبيقات PHP الواقعية.
تتطلب هذه الأمثلة PHP 7.3 وأحدث، على الرغم من أنه يمكن تكرارها بسهولة في الإصدارات الأقدم من PHP.
يوفر هذا الإصدار وسيطة صريحة وإعلانات عن نوع الإرجاع، مما يساعد على فهم أفضل لبعض ميزات الأنماط التي ليست واضحة جدًا في اللغة المكتوبة ديناميكيًا.
يمكن إطلاق جميع الأمثلة عبر سطر الأوامر، باستخدام PHP القابل للتنفيذ على النحو التالي:
php src/Path-to-example/index.php
للحصول على أفضل تجربة، أوصي بالعمل مع الأمثلة باستخدام بيئة التطوير المتكاملة هذه:
لقد نفدت أفكاري اللائقة للاستخدامات الواقعية لهذين التطبيقين في تطبيقات PHP. إذا كنت قد استخدمتها في مشروعك، فلا تتردد في اقتراح فكرة لي عن طريق نشر مشكلة.
العميل يعني عميل الفئات، الذي تم تعريفه كجزء من النمط ، وهو مجرد منادي للطرق المحددة أو مستخدم للفئات المحددة. بمعنى آخر، إنه جزء من كود تطبيقك الذي يستخدم فئات النمط.
ألق نظرة على المثال المفاهيمي أولاً. ستجد هناك وصفًا تفصيليًا لكل فئة في النمط ودورها واتصالها بالفئات الأخرى.
أقدر أي مساعدة، سواء كان ذلك إصلاحًا بسيطًا لخطأ مطبعي أو مثالًا جديدًا تمامًا. ما عليك سوى إنشاء شوكة وإجراء التغيير وإرسال طلب سحب.
فيما يلي دليل الأسلوب الذي قد يساعدك في الحفاظ على اتساق تغييراتك مع بقية كود المشروع:
يجب أن تتطابق جميع التعليمات البرمجية مع دليل نمط ترميز PSR2
حاول تغليف الكود بالحرف الثمانين. يساعد على إدراج الكود على موقع الويب بدون أشرطة التمرير.
يجب أن تتطابق الأمثلة مع اصطلاح مساحة الاسم التالي: RefactoringGuru{pattern-name}{example-name}. على سبيل المثال:
<?php
namespace RefactoringGuru FactoryMethod Example Buttons ;
class Button {
...
تهدف إلى وضع كل التعليمات البرمجية في ملف واحد. نعم، أدرك أن الأمر ليس كما يفترض أن يتم في الإنتاج. ومع ذلك، فهو يساعد الأشخاص على فهم الأمثلة بشكل أفضل، حيث يتم وضع جميع التعليمات البرمجية في شاشة واحدة.
قد تحتوي التعليقات أو لا تحتوي على علامات لغة، مثل هذا:
/**
* EN : All products families have the same varieties ( MacOS / Windows ) .
*
* This is a MacOS variant of a button .
*
* RU : Все семейства продуктов имеют одни и те же вариации ( MacOS / Windows ) .
*
* Это вариант кнопки под MacOS .
* /
يساعد هذا الترميز في الاحتفاظ بالكود في مكان واحد مع السماح لموقع الويب بإنشاء إصدارات منفصلة من الأمثلة لجميع اللغات المدرجة. لا تخف وتجاهل الجزء غير الإنجليزي من هذه التعليقات. إذا كنت تريد تغيير شيء ما في تعليق مثل هذا، فما عليك سوى القيام بذلك. حتى إذا قمت بذلك بشكل خاطئ، فسنخبرك بكيفية إصلاح ذلك أثناء طلب السحب.
تم ترخيص هذا العمل بموجب ترخيص Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 الدولي.
المؤلفون: ألكسندر شفيتس (@neo Chief) وأليكسي بيلتسين (@lex111)