نظام الاستعارة
جزء من قسم Object Oriented Programming في رحلة PHP على Coddy — الدرس 84 من 91.
التحدي
سهلدعنا نبث الحياة في نظام إدارة المكتبة الخاص بنا من خلال إنشاء فئة Library التي تنسق جميع عمليات الاستعارة. سيعمل هذا المنسق المركزي على إدارة مجموعة الكتب وفرض القواعد التي تحافظ على سير عمل مكتبتنا بسلاسة.
ستقوم بتنظيم الكود الخاص بك عبر أربعة ملفات:
Book.php— فئةBookالخاصة بك من الدرس السابق مع خصائص للقراءة فقط (isbn،title،author)، وخاصية$isAvailableخاصة تبدأ بـtrue، والأساليب:isAvailable()، وmarkAsBorrowed()، وmarkAsReturned().User.php— قم بتضمين ملف Book. فئةUserالخاصة بك مع خصائص للقراءة فقط (id،name)، ومصفوفة$borrowedBooksخاصة، وثابتMAX_BOOKSبقيمة3، والأساليب:getBorrowedBooks()، وcanBorrow()، وaddBook(Book $book)، وremoveBook(string $isbn).Library.php— قم بتضمين ملف User. أنشئ فئةLibraryتدير مجموعة الكتب. يجب أن تحتوي مكتبتك على:- مصفوفة
$booksخاصة لتخزين الكتب مفهرسة بواسطة ISBN addBook(Book $book): void— يضيف كتاباً إلى المجموعةfindBook(string $isbn): ?Book— يعيد الكتاب أو null إذا لم يتم العثور عليهborrowBook(User $user, string $isbn): string— يتحقق من عملية الاستعارة ويعالجها، ويعيد الرسائل المناسبةreturnBook(User $user, string $isbn): string— يعالج عمليات الإرجاع ويحدث حالة كل من الكتاب والمستخدم
يجب أن يتحقق أسلوب
borrowBookمن ثلاثة شروط بالترتيب ويعيد هذه الرسائل بدقة:"Book not found"— إذا كان الكتاب غير موجود"Book is not available"— إذا كان مستعاراً بالفعل"Borrowing limit reached"— إذا كان لدى المستخدم 3 كتب"Successfully borrowed: [title]"— عند النجاح
يجب أن يعيد أسلوب
returnBookالرسالة"Book not found"إذا كان الكتاب غير موجود، أو"Successfully returned: [title]"عند النجاح.- مصفوفة
main.php— قم بتضمين ملف Library. ستتلقى مدخلين: ISBN وعنوان الكتاب.أنشئ
Library، ومستخدماًUserبمعرف1واسم"Alice"، وكتاباًBookباستخدام ISBN والعنوان المقدمين، والمؤلف"Unknown". أضف الكتاب إلى المكتبة، ثم قم بتنفيذ هذه العمليات واطبع كل نتيجة في سطر جديد:- استعارة الكتاب
- محاولة استعارة نفس الكتاب مرة أخرى
- إرجاع الكتاب
- استعارة الكتاب مرة أخرى
يوضح هذا التحدي كيف تقوم فئة Library بتركيز منطق العمل — فهي تتحقق من الشروط، وتنسق تغييرات الحالة عبر كائنات Book و User، وتعيد ملاحظات ذات معنى لكل عملية.
جرّب بنفسك
<?php
require_once 'Library.php';
// قراءة المدخلات
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));
// TODO: إنشاء نسخة من المكتبة (Library instance)
// TODO: إنشاء مستخدم بالمعرف 1 والاسم "Alice"
// TODO: إنشاء كتاب باستخدام ISBN والعنوان المقدمين والمؤلف "Unknown"
// TODO: إضافة الكتاب إلى المكتبة
// TODO: قم بتنفيذ هذه العمليات واطبع كل نتيجة في سطر جديد:
// 1. استعارة الكتاب
// 2. محاولة استعارة نفس الكتاب مرة أخرى
// 3. إرجاع الكتاب
// 4. استعارة الكتاب مرة أخرى
?>جميع دروس 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 Collection11نظام الأنواع ومعالجة الأخطاء
تصريحات الأنواعالأنواع القابلة للقيمة Nullأنواع الاتحاد والتقاطعفئات الاستثناءاتتسلسل الاستثناءات المخصصةTry, Catch, Finallyمراجعة - مدقق النماذج14مشروع: إدارة المكتبة
نظرة عامة على المشروعفئات الكتاب والمستخدم3خصائص الكلاس
خصائص الـ Instance مقابل الخصائص الساكنة (Static)الثوابت في الكلاساتالدوال والخصائص الساكنة (Static)الخصائص الخاصة (Private) والمحمية (Protected)خصائص للقراءة فقط (Readonly) في PHP 8.1مراجعة - مدير الحساب البنكي6تعدد الأشكال (Polymorphism)
مراجعة إعادة تعريف الدوال (Method Overriding)تعدد الأشكال عبر الـ Interfacesتلميح النوع (Type Hinting) وأنواع الاتحاد (Union Types)الربط الاستاتيكي المتأخر (Late Static Binding)ملخص - معالج الدفع (Payment Processor)