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

واجهة المسؤول

جزء من قسم Object Oriented Programming في رحلة PHP على Coddy — الدرس 86 من 91.

challenge icon

التحدي

سهل

دعنا نوسع نظام إدارة المكتبة الخاص بنا عن طريق إضافة إمكانيات إدارية. ستقوم بإنشاء فئة Admin ترث من User ولكن لديها صلاحيات خاصة لإدارة مخزون المكتبة — إضافة كتب جديدة وإزالة الكتب الموجودة.

ستقوم بتنظيم الكود الخاص بك عبر خمسة ملفات:

  • 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 الخاصة بك مع الوظائف الحالية بما في ذلك addBook()، و findBook()، و borrowBook()، و returnBook()، وأساليب البحث. أضف أسلوباً جديداً:
    • removeBook(string $isbn): void — يزيل كتاباً من المجموعة باستخدام unset()
  • Admin.php — قم بتضمين ملف Library. أنشئ فئة Admin ترث من User. يرث المسؤولون (Admins) جميع إمكانيات المستخدم ولكنهم يكتسبون أسلوبين إداريين:
    • addBookToLibrary(Library $library, Book $book): string — يضيف الكتاب إلى المكتبة ويعيد "Added: [title]"
    • removeBookFromLibrary(Library $library, string $isbn): string — يحاول إزالة كتاب مع هذه التحققات:
      • إذا كان الكتاب غير موجود، أعد "Book not found"
      • إذا كان الكتاب مستعاراً حالياً، أعد "Cannot remove: book is currently borrowed"
      • خلاف ذلك، قم بإزالته وأعد "Removed: [title]"
  • main.php — قم بتضمين ملف Admin. ستتلقى مدخلين: ISBN وعنوان الكتاب.

    أنشئ Library و Admin بمعرف 1 واسم "AdminUser". أنشئ أيضاً User عادياً بمعرف 2 واسم "RegularUser".

    أنشئ Book باستخدام ISBN والعنوان المقدمين، والمؤلف "Test Author". قم بإجراء هذه العمليات واطبع كل نتيجة في سطر جديد:

    1. اجعل المسؤول يضيف الكتاب إلى المكتبة
    2. اجعل المستخدم العادي يستعير الكتاب
    3. اجعل المسؤول يحاول إزالة الكتاب (يجب أن يفشل — لأنه مستعار)
    4. اجعل المستخدم العادي يعيد الكتاب
    5. اجعل المسؤول يزيل الكتاب (يجب أن ينجح الآن)
    6. اجعل المسؤول يحاول إزالة نفس الكتاب مرة أخرى (يجب أن يفشل — غير موجود)

يوضح هذا التحدي كيف ينشئ التوريث تسلسلاً هرمياً طبيعياً — المسؤولون هم مستخدمون يتمتعون بامتيازات إضافية. تضمن فحوصات السلامة في removeBookFromLibrary سلامة البيانات عن طريق منع إزالة الكتب التي لا تزال قيد التداول.

جرّب بنفسك

<?php
require_once 'Admin.php';

// قراءة المدخلات
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: إنشاء مكتبة (Library)

// TODO: إنشاء مسؤول (Admin) بمعرف 1 واسم "AdminUser"

// TODO: إنشاء مستخدم عادي (User) بمعرف 2 واسم "RegularUser"

// TODO: إنشاء كتاب (Book) باستخدام ISBN والعنوان المقدمين، والمؤلف "Test Author"

// TODO: تنفيذ هذه العمليات وطباعة كل نتيجة في سطر جديد:
// 1. قيام المسؤول بإضافة الكتاب إلى المكتبة
// 2. قيام المستخدم العادي باستعارة الكتاب
// 3. محاولة المسؤول إزالة الكتاب (يجب أن تفشل - لأنه مستعار)
// 4. قيام المستخدم العادي بإعادة الكتاب
// 5. قيام المسؤول بإزالة الكتاب (يجب أن تنجح الآن)
// 6. محاولة المسؤول إزالة نفس الكتاب مرة أخرى (يجب أن تفشل - غير موجود)

?>

جميع دروس Object Oriented Programming