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

فئات الكتاب والمستخدم

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

challenge icon

التحدي

سهل

دعونا نبني أساس نظام إدارة المكتبة الخاص بنا من خلال إنشاء فئتي Book و User. ستعمل كائنات النطاق الأساسية هذه معاً لإدارة عمليات المكتبة.

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

  • Book.php — أنشئ فئة Book التي تتبع كتب المكتبة. يجب أن يحتوي كتابك على ثلاث خصائص للقراءة فقط (readonly) يتم تعيينها عبر ترقية المنشئ (constructor promotion): isbn، و title، و author. قم بتضمين خاصية $isAvailable خاصة (private) تبدأ كـ true. أضف ثلاث طرق (methods):
    • isAvailable(): bool — تعيد حالة التوفر
    • markAsBorrowed(): void — تضبط التوفر على false
    • markAsReturned(): void — تضبط التوفر على true
  • User.php — قم بتضمين ملف Book وأنشئ فئة User تمثل أعضاء المكتبة. يجب أن يكون للمستخدم خاصيتان للقراءة فقط عبر ترقية المنشئ: id (int) و name (string). قم بتضمين مصفوفة خاصة $borrowedBooks (فارغة في البداية) وثابت MAX_BOOKS مضبوط على 3. أضف هذه الطرق:
    • getBorrowedBooks(): array — تعيد مصفوفة الكتب المستعارة
    • canBorrow(): bool — تعيد true إذا كان لدى المستخدم أقل من MAX_BOOKS مستعارة
    • addBook(Book $book): void — تضيف كتاباً إلى مصفوفة الكتب المستعارة
    • removeBook(string $isbn): void — تزيل كتاباً بواسطة ISBN باستخدام array_filter
  • main.php — قم بتضمين ملف User وقم بتفعيل فئاتك. ستتلقى أربعة مدخلات: معرف المستخدم (user ID)، اسم المستخدم، ISBN الكتاب، وعنوان الكتاب (سيكون المؤلف "Unknown").

    أنشئ User و Book بالقيم المقدمة. اطبع ما إذا كان بإمكان المستخدم الاستعارة في البداية، ثم اجعل المستخدم يستعير الكتاب (قم بتمييزه كمستعار وأضفه إلى المستخدم). أخيراً، اطبع توفر الكتاب وعدد الكتب المستعارة.

    تنسيق المخرجات:

    Can borrow: [yes/no]
    Book available: [yes/no]
    Books borrowed: [count]

لاحظ كيف يحمي التغليف (encapsulation) الحالة الداخلية — لا تتغير حالة توفر الكتاب إلا من خلال طرق مخصصة، وتتم إدارة الكتب المستعارة للمستخدم من خلال وصول محكوم. سيدعم هذا الأساس نظام الاستعارة الذي سنبنيه لاحقاً.

جرّب بنفسك

<?php

require_once 'User.php';

// قراءة المدخلات
$userId = intval(trim(fgets(STDIN)));
$userName = trim(fgets(STDIN));
$bookIsbn = trim(fgets(STDIN));
$bookTitle = trim(fgets(STDIN));
$bookAuthor = "Unknown";

// TODO: إنشاء كائن User باستخدام id و name المقدمين

// TODO: إنشاء كائن Book باستخدام isbn و title و author المقدمين

// TODO: طباعة ما إذا كان بإمكان المستخدم الاستعارة في البداية
// التنسيق: "Can borrow: yes" أو "Can borrow: no"

// TODO: جعل المستخدم يستعير الكتاب:
// - تحديد الكتاب كـ مستعار
// - إضافة الكتاب إلى الكتب المستعارة الخاصة بالمستخدم

// TODO: طباعة حالة توفر الكتاب
// التنسيق: "Book available: yes" أو "Book available: no"

// TODO: طباعة عدد الكتب المستعارة
// التنسيق: "Books borrowed: [count]"

?>

جميع دروس Object Oriented Programming