Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

ملخص - مشروع منظم

جزء من قسم البرمجة كائنية التوجه في رحلة PHP على Coddy. الدرس 14 من 91.

challenge icon

التحدي

سهل

لنَبْنِ تطبيق مدونة كاملًا مع تنظيم مناسب لـ namespace، جامعًا كل ما تعلّمته عن namespace، والكلمة المفتاحية use، والتحميل التلقائي وفق PSR-4.

ستنشئ مشروعًا منظمًا جيدًا يتكوّن من خمسة ملفات توضّح كيفية تنظيم تطبيقات PHP الحقيقية لشفرتها:

  • src/Models/Author.php: عرّف Author class في namespace Blog\Models. يجب أن يحتوي على خاصية public $name، وconstructor يقبل الاسم ويعيّنه، وgetBio() method تعيد "Author: [name]".
  • src/Models/Post.php: عرّف Post class في namespace Blog\Models. يجب أن يحتوي على خاصيتي public $title وpublic $author، حيث إن author هو Author object. يقبل constructor عنوانًا وAuthor object، ويعيّن كليهما. أضف getSummary() method تعيد "[title] by [author name]".
  • src/Services/Publisher.php: عرّف Publisher class في namespace Blog\Services. يجب أن يحتوي على method باسم publish(Post $post) تقبل Post object وتعيد "Published: [post title]". ستحتاج إلى Import Post class باستخدام الكلمة المفتاحية use لأنها موجودة في namespace مختلف.
  • vendor/autoload.php: أنشئ autoloader وفق PSR-4 باستخدام spl_autoload_register، بحيث يربط prefix الخاص بـ namespace Blog\ بالدليل src/. يتولى هذا autoloader الوحيد تحميل جميع classes تلقائيًا.
  • index.php: نقطة الدخول الخاصة بك. نفّذ Require لـ autoloader، ثم استخدم الكلمة المفتاحية use لاستيراد Blog\Models\Author وBlog\Models\Post وBlog\Services\Publisher. أنشئ Author named "Jane Smith"، وPost بعنوان "Getting Started with PHP" باستخدام ذلك author، وPublisher. اطبع السيرة الذاتية للمؤلف، وملخص المنشور، ونتيجة نشر المنشور، بحيث يظهر كل منها في سطر مستقل.

لاحظ كيف تعتمد خدمة Publisher على نموذج Post. يوضّح هذا كيف يمكن لـ classes الموجودة في namespaces مختلفة أن تعمل معًا من خلال Import ما تحتاج إليه باستخدام عبارات use.

جرّب بنفسك

<?php
// تضمين المحمّل التلقائي
require_once 'vendor/autoload.php';

// TODO: استورد الفئات اللازمة باستخدام عبارات 'use'
// - Blog\Models\Author
// - Blog\Models\Post
// - Blog\Services\Publisher

// TODO: أنشئ Author باسم "Jane Smith"

// TODO: Create a Post with title "Getting Started with PHP" using that author

// TODO: أنشئ Publisher

// TODO: اطبع السيرة الذاتية للمؤلف

// TODO: اطبع ملخص المنشور

// TODO: اطبع نتيجة نشر المنشور
?>

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم PHP عبر الإنترنت