خاصية البحث
جزء من قسم البرمجة كائنية التوجه في رحلة PHP على Coddy. الدرس 85 من 91.
التحدي
سهللنطوّر نظام إدارة المكتبة بإضافة 기능ة البحث. يحتاج المستخدمون إلى العثور على الكتب بسهولة، سواء كانوا يبحثون عن عنوان محدد، أو يتصفحون حسب المؤلف، أو يتحققون من الكتب المتاحة حاليًا للاستعارة.
ستنظّم التعليمات البرمجية عبر four ملفات:
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الخاصة بك لتشمل الوظائف الحالية بالإضافة إلى ثلاث طرق بحث جديدة:searchByTitle(string $keyword): array: تُرجع جميع الكتب التي يحتوي عنوانها على الكلمة المفتاحية، مع تجاهل حالة الأحرفsearchByAuthor(string $author): array: تُرجع جميع الكتب التي يحتوي اسم مؤلفها على مصطلح البحث، مع تجاهل حالة الأحرفgetAvailableBooks(): array: تُرجع الكتب المتاحة حاليًا للاستعارة فقط
استخدم
array_filterمع الدوال السهمية وstriposلإجراء المطابقة مع تجاهل حالة الأحرف. تذكّر أنstriposتُرجعfalseعند عدم العثور على تطابق، لذا تحقّق من!== false.main.php: ضمّن ملف Library. ستتلقى مُدخلين: كلمة مفتاحية للبحث واسم مؤلف.أنشئ كائنًا من
Libraryوأضف هذه الكتب الأربعة:- ISBN:
"978-0"، العنوان:"PHP Basics"، المؤلف:"John Smith" - ISBN:
"978-1"، العنوان:"Advanced PHP"، المؤلف:"Jane Doe" - ISBN:
"978-2"، العنوان:"Python Guide"، المؤلف:"John Smith" - ISBN:
"978-3"، العنوان:"Web Development"، المؤلف:"Alice Brown"
استعر الكتاب الذي يحمل ISBN
"978-1"باستخدامUserذي المعرّف1والاسم"TestUser".ثم نفّذ عمليات البحث التالية واطبع النتائج:
- ابحث حسب العنوان باستخدام المُدخل الأول، واطبع عنوان كل كتاب مطابق في سطر جديد
- ابحث حسب المؤلف باستخدام المُدخل الثاني، واطبع عدد الكتب المطابقة
- احصل على الكتب المتاحة واطبع العدد
تنسيق الإخراج:
Title matches: [title1] [title2] ... Author matches: [count] Available: [count]- ISBN:
يوضّح هذا التحدي كيف ينشئ array_filter، عند دمجه مع stripos، وظيفة بحث قوية وسهلة الاستخدام للمستخدم. تعني المطابقة مع تجاهل حالة الأحرف أن المستخدمين لا يحتاجون إلى القلق بشأن الكتابة بالأحرف الكبيرة أو الصغيرة بشكل مطابق تمامًا عند البحث.
جرّب بنفسك
<?php
require_once 'Library.php';
// اقرأ المدخلات
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));
// TODO: أنشئ مثيلاً من Library
// TODO: أضف الكتب الأربعة إلى المكتبة:
// ISBN: "978-0", العنوان: "PHP Basics", المؤلف: "John Smith"
// ISBN: "978-1", العنوان: "Advanced PHP", المؤلف: "Jane Doe"
// ISBN: "978-2", العنوان: "Python Guide", المؤلف: "John Smith"
// ISBN: "978-3", Title: "Web Development", Author: "Alice Brown"
// TODO: أنشئ User بالمعرّف 1 والاسم "TestUser"، وسجّله
// TODO: استعر الكتاب ذو ISBN "978-1"
// TODO: ابحث حسب العنوان باستخدام $searchKeyword واطبع النتائج
echo "Title matches:\n";
// اطبع عنوان كل كتاب مطابق في سطر جديد
// TODO: ابحث حسب المؤلف باستخدام $authorName واطبع العدد
echo "Author matches: " . /* العدد هنا */ "\n";
// TODO: احصل على الكتب المتاحة واطبع العدد
echo "Available: " . /* العدد هنا */ "\n";
?>جميع دروس البرمجة كائنية التوجه
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)تدرّب بنفسك: مترجم PHP عبر الإنترنت