ملخص - مشروع منظم
جزء من قسم Object Oriented Programming في رحلة PHP على Coddy — الدرس 14 من 91.
التحدي
سهللنقم ببناء تطبيق مدونة كامل مع تنظيم صحيح لمساحات الأسماء (namespaces)، لنجمع كل ما تعلمته حول مساحات الأسماء، والكلمة المفتاحية use، والتحميل التلقائي PSR-4.
ستقوم بإنشاء مشروع جيد التنظيم يتكون من خمسة ملفات توضح كيفية تنظيم تطبيقات PHP الحقيقية لأكوادها:
src/Models/Author.php— قم بتعريف فئةAuthorداخل مساحة الأسماءBlog\Models. يجب أن تحتوي على خاصيةpublic $name، ومنشئ (constructor) يقبل الاسم ويقوم بتعيينه، وتابعgetBio()يعيد"Author: [name]".src/Models/Post.php— قم بتعريف فئةPostداخل مساحة الأسماءBlog\Models. يجب أن تحتوي على خصائصpublic $titleوpublic $author(حيث يكون author كائناً من نوعAuthor). يقبل المنشئ عنواناً وكائناً من نوعAuthor، ويقوم بتعيينهما معاً. أضف تابعgetSummary()يعيد"[title] by [author name]".src/Services/Publisher.php— قم بتعريف فئةPublisherداخل مساحة الأسماءBlog\Services. يجب أن تحتوي على تابعpublish(Post $post)يقبل كائناً من نوعPostويعيد"Published: [post title]". ستحتاج إلى استيراد فئةPostباستخدام الكلمة المفتاحيةuseلأنها موجودة في مساحة أسماء مختلفة.vendor/autoload.php— قم بإنشاء محمل تلقائي (autoloader) بمعيار PSR-4 باستخدامspl_autoload_registerيقوم بربط بادئة مساحة الأسماءBlog\بمجلدsrc/. هذا المحمل التلقائي الواحد سيتولى تحميل جميع فئاتك تلقائياً.index.php— نقطة الدخول الخاصة بك. قم باستدعاء المحمل التلقائي، ثم استخدم الكلمة المفتاحيةuseلاستيرادBlog\Models\AuthorوBlog\Models\PostوBlog\Services\Publisher. أنشئAuthorباسم"Jane Smith"، وPostبعنوان"Getting Started with PHP"باستخدام ذلك المؤلف، وPublisher. اطبع سيرة المؤلف الذاتية، وملخص المنشور، ونتيجة نشر المنشور (كل منها في سطر مستقل).
لاحظ كيف تعتمد خدمة Publisher على نموذج Post — وهذا يوضح كيف يمكن للفئات في مساحات أسماء مختلفة أن تعمل معاً عن طريق استيراد ما تحتاجه باستخدام عبارات use.
جرّب بنفسك
<?php
// استدعاء ملف التحميل التلقائي (autoloader)
require_once 'vendor/autoload.php';
// TODO: استيراد الفئات اللازمة باستخدام عبارات 'use'
// - Blog\Models\Author
// - Blog\Models\Post
// - Blog\Services\Publisher
// TODO: إنشاء كاتب (Author) باسم "Jane Smith"
// TODO: إنشاء منشور (Post) بعنوان "Getting Started with PHP" باستخدام ذلك الكاتب
// TODO: إنشاء ناشر (Publisher)
// TODO: طباعة السيرة الذاتية للكاتب
// TODO: طباعة ملخص المنشور
// TODO: طباعة نتيجة نشر المنشور
?>جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةمقدمة في OOPClasses مقابل Objectsالكلمة المفتاحية $thisالـ Methodsالـ Propertiesالمنشئ (__construct)الهادم (__destruct)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسيةالكلمة المفتاحية parent::إعادة تعريف الدوال (Method Overriding)الكلمة المفتاحية finalالأصناف المجردة (Abstract Classes)مراجعة - هيكلية الموظفين7التغليف (Encapsulation)
العام، المحمي، الخاص (Public, Protected, Private)نظرة متعمقة على معدلات الوصولدوال Getters و Settersإخفاء المعلوماتميزة Constructor Promotion (8.0)مراجعة - نظام سجلات الطلاب10مفاهيم البرمجة كائنية التوجه المتقدمة
التركيب مقابل الوراثةحقن التبعيةالأصناف المجهولةالتعدادات (PHP 8.1)الألياف (PHP 8.1)تعمق في استنساخ الكائناتالمولدات والمكررات13أنماط التصميم - الجزء الثاني
نمط الأمرنمط المحولنمط المزيننمط طريقة القالبنمط الحالةنمط التركيبنمط المستودع2مساحات الأسماء والتحميل التلقائي
مقدمة إلى مساحات الأسماءالكلمة المفتاحية useمعيار التحميل التلقائي PSR-4أداة التحميل التلقائي Composerملخص - مشروع منظم5الواجهات والعقود
مقدمة إلى الواجهاتتنفيذ الواجهاتتنفيذ واجهات متعددةالواجهة مقابل الـ Abstract Classالـ Type Hinting مع الواجهاتملخص - حاسبة الأشكال8الميثودات السحرية (Magic Methods)
مقدمة في الميثودات السحرية__toString و __debugInfo__get, __set, __isset, __unset__call و __callStatic__clone واستنساخ الكائنات__serialize و __unserializeمراجعة - Custom Collection3خصائص الكلاس
خصائص الـ Instance مقابل الخصائص الساكنة (Static)الثوابت في الكلاساتالدوال والخصائص الساكنة (Static)الخصائص الخاصة (Private) والمحمية (Protected)خصائص للقراءة فقط (Readonly) في PHP 8.1مراجعة - مدير الحساب البنكي6تعدد الأشكال (Polymorphism)
مراجعة إعادة تعريف الدوال (Method Overriding)تعدد الأشكال عبر الـ Interfacesتلميح النوع (Type Hinting) وأنواع الاتحاد (Union Types)الربط الاستاتيكي المتأخر (Late Static Binding)ملخص - معالج الدفع (Payment Processor)