الاختبار والتكامل
جزء من قسم Object Oriented Programming في رحلة PHP على Coddy — الدرس 87 من 91.
التحدي
سهلتهانينا على بناء نظام كامل لإدارة المكتبة! حان الوقت الآن لجمع كل مكوناتك معاً والتحقق من أن كل شيء يعمل بسلاسة. ستقوم بإنشاء اختبار تكامل شامل يطبق سير العمل الكامل لمكتبتك.
ستقوم بتنظيم الكود الخاص بك عبر خمسة ملفات:
Book.php— فئةBookالخاصة بك مع خصائص للقراءة فقط (isbn،title،author)، وخاصية خاصة$isAvailable، والأساليب:isAvailable()، وmarkAsBorrowed()، وmarkAsReturned().User.php— قم بتضمين ملف Book. فئةUserالخاصة بك مع خصائص للقراءة فقط (id،name)، ومصفوفة خاصة$borrowedBooks، وثابتMAX_BOOKSبقيمة3، وجميع أساليب المستخدم.Library.php— قم بتضمين ملف User. فئةLibraryالخاصة بك مع إدارة الكتب، ووظائف الاستعارة/الإرجاع، وأساليب البحث، وأسلوبremoveBook().Admin.php— قم بتضمين ملف Library. فئةAdminالخاصة بك التي ترث منUserمع أساليبaddBookToLibrary()وremoveBookFromLibrary().main.php— قم بتضمين ملف Admin. هذا هو المكان الذي ستجري فيه اختبار التكامل الخاص بك. ستتلقى مدخلين: اسم مستخدم وكلمة مفتاحية للبحث عن مؤلف.قم بإعداد نظام المكتبة الخاص بك:
- أنشئ
Library - أنشئ
Adminبمعرف1واسم"LibraryAdmin" - أنشئ
Userبمعرف2واسم المستخدم المقدم
اجعل المسؤول (admin) يضيف هذه الكتب الثلاثة:
- ISBN:
"978-0"، العنوان:"PHP Fundamentals"، المؤلف:"Sarah Johnson" - ISBN:
"978-1"، العنوان:"OOP Patterns"، المؤلف:"Mike Chen" - ISBN:
"978-2"، العنوان:"Web Security"، المؤلف:"Sarah Johnson"
ثم قم بتشغيل تسلسل اختبار التكامل هذا، مع طباعة كل نتيجة في سطر جديد:
- اجعل المستخدم يستعير
"978-0" - اجعل المستخدم يستعير
"978-1" - ابحث عن طريق المؤلف باستخدام المدخل الثاني واطبع العدد:
"Books by author: [count]" - احصل على الكتب المتاحة واطبع:
"Available: [count]" - اجعل المستخدم يعيد
"978-0" - احصل على الكتب المتاحة مرة أخرى واطبع:
"Available after return: [count]" - اجعل المسؤول يزيل
"978-0" - اجعل المسؤول يحاول إزالة
"978-0"مرة أخرى
- أنشئ
يتحقق هذا التحدي النهائي من أن نظامك بالكامل يعمل معاً — المسؤولون يديرون المخزون، والمستخدمون يستعيرون ضمن الحدود، وعمليات البحث تعيد نتائج دقيقة، وتحديث التوفر بشكل صحيح طوال سير العمل.
جرّب بنفسك
<?php
require_once 'Admin.php';
// قراءة المدخلات
$userName = trim(fgets(STDIN));
$searchAuthor = trim(fgets(STDIN));
// TODO: إنشاء مكتبة (Library)
// TODO: إنشاء مسؤول (Admin) بمعرف 1 واسم "LibraryAdmin"
// TODO: إنشاء مستخدم (User) بمعرف 2 واسم المستخدم المقدم
// TODO: اجعل المسؤول يضيف ثلاثة كتب:
// - ISBN: "978-0", Title: "PHP Fundamentals", Author: "Sarah Johnson"
// - ISBN: "978-1", Title: "OOP Patterns", Author: "Mike Chen"
// - ISBN: "978-2", Title: "Web Security", Author: "Sarah Johnson"
// TODO: تسلسل اختبار التكامل:
// 1. اجعل المستخدم يستعير "978-0"
// 2. اجعل المستخدم يستعير "978-1"
// 3. ابحث بواسطة المؤلف باستخدام $searchAuthor واطبع: "Books by author: [count]"
// 4. احصل على الكتب المتاحة واطبع: "Available: [count]"
// 5. اجعل المستخدم يعيد "978-0"
// 6. احصل على الكتب المتاحة مرة أخرى واطبع: "Available after return: [count]"
// 7. اجعل المسؤول يحذف "978-0"
// 8. اجعل المسؤول يحاول حذف "978-0" مرة أخرى
?>جميع دروس 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)