פונקציונליות חיפוש
חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 85 מתוך 91.
אתגר
קלבואו נשפר את מערכת ניהול הספרייה שלנו באמצעות הוספת פונקציונליות חיפוש. משתמשים צריכים להיות מסוגלים למצוא ספרים בקלות, בין שהם מחפשים כותר מסוים, מעיינים בספרים לפי מחבר או בודקים אילו ספרים זמינים כרגע להשאלה.
תארגנו את הקוד שלכם בארבעה קבצים:
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", כותרת: "Web Development", מחבר: "Alice Brown"
// TODO: צרו User עם ID 1 והשם "TestUser", ורשמו אותו
// TODO: השאילו את הספר עם ISBN "978-1"
// TODO: חפשו לפי כותרת באמצעות $searchKeyword והדפיסו את התוצאות
echo "Title matches:\n";
// הדפיסו את הכותרת של כל ספר תואם בשורה חדשה
// TODO: חפשו לפי מחבר באמצעות $authorName והדפיסו את מספר התוצאות
echo "Author matches: " . /* מספר כאן */ "\n";
// TODO: קבל את הספרים הזמינים והדפס את מספרם
echo "Available: " . /* מספר כאן */ "\n";
?>כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים (OOP)
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח $thisמתודותמאפייניםבנאי (__construct)הורס (__destruct)חזרה: מחשבון פשוט4ירושה
ירושה בסיסיתמילת המפתח parent::דריסת מתודותמילת המפתח finalמחלקות מופשטותסיכום – היררכיית עובדים7כימוס
ציבורי, מוגן, פרטימפרטי גישה לעומקמתודות גישה ועדכוןהסתרת מידעקידום פרמטרים בבנאי (8.0)סיכום – מערכת רישומי תלמידים2מרחבי שמות וטעינה אוטומטית
מבוא למרחבי שמותמילת המפתח useתקן הטעינה האוטומטית PSR-4הטוען האוטומטי של Composerסיכום – פרויקט מאורגן5ממשקים וחוזים
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםממשק לעומת מחלקה מופשטתרמזי טיפוסים עם ממשקיםסיכום - מחשבון צורות8מתודות קסם
מבוא למתודות קסם__toString ו־__debugInfo__get, __set, __isset, __unset__call ו־__callStatic__clone ושיבוט אובייקטים__serialize ו־__unserializeסיכום – אוסף מותאם אישית11מערכת טיפוסים וטיפול בשגיאות
הצהרות טיפוסיםטיפוסים שניתנים להכלה של nullטיפוסי איחוד וחיתוךמחלקות חריגההיררכיית חריגות מותאמת אישיתTry, Catch, Finallyסיכום – מאמת טפסים14פרויקט: ניהול ספרייה
סקירת הפרויקטמחלקות ספר ומשתמש3מאפייני מחלקה
מאפייני מופע לעומת מאפיינים סטטייםקבועים במחלקותמתודות ומאפיינים סטטייםמאפיינים פרטיים ומוגניםמאפיינים לקריאה בלבד (PHP 8.1)סיכום – מנהל חשבון בנק6פולימורפיזם
בחינה מחדש של דריסת מתודותפולימורפיזם באמצעות ממשקיםרמזי טיפוסים וטיפוסי איחודקישור סטטי מאוחרסיכום — מעבד תשלומיםתרגלו בעצמכם: קומפיילר PHP אונליין