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 باستخدام المعرف والاسم المقدمين

// TODO: إنشاء كائن Book باستخدام الرقم الدولي المعياري (isbn) والعنوان والمؤلف المقدمين

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

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

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

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

?>

جميع دروس Object Oriented Programming