ממשק מנהל
חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 86 מתוך 91.
אתגר
קלנרחיב את מערכת ניהול הספרייה שלנו באמצעות הוספת יכולות ניהול. תיצור מחלקת Admin שיורשת מ־User, אך יש לה הרשאות מיוחדות לניהול מלאי הספרייה: הוספת ספרים חדשים והסרת ספרים קיימים.
תארגן את הקוד שלך בחמישה קבצים:
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שלך עם הפונקציונליות הקיימת, כוללaddBook(),findBook(),borrowBook(),returnBook()ומתודות החיפוש. הוסף מתודה חדשה:removeBook(string $isbn): void: מסירה ספר מהאוסף באמצעותunset()
Admin.php: כלול את קובץ Library. צור מחלקתAdminשיורשת מ־User. מנהלים יורשים את כל היכולות של המשתמשים, אך מקבלים שתי מתודות ניהוליות:addBookToLibrary(Library $library, Book $book): string: מוסיפה את הספר לספרייה ומחזירה"Added: [title]"removeBookFromLibrary(Library $library, string $isbn): string: מנסה להסיר ספר באמצעות הבדיקות הבאות:- אם הספר לא קיים, החזר
"Book not found" - אם הספר מושאל כרגע, החזר
"Cannot remove: book is currently borrowed" - אחרת, הסר אותו והחזר
"Removed: [title]"
- אם הספר לא קיים, החזר
main.php: כלול את קובץ Admin. תקבל שתי קלטים: ISBN ושם ספר.צור
Libraryו־Adminעם מזהה1ושם"AdminUser". צור גם משתמשUserרגיל עם מזהה2ושם"RegularUser".צור
Bookעם ה־ISBN והכותרת שסופקו, ועם המחבר"Test Author". בצע את הפעולות הבאות והדפס את התוצאה של כל אחת בשורה חדשה:- בקש מהמנהל להוסיף את הספר לספרייה
- בקש מהמשתמש הרגיל לשאול את הספר
- בקש מהמנהל לנסות להסיר את הספר (הפעולה אמורה להיכשל: הספר מושאל)
- בקש מהמשתמש הרגיל להחזיר את הספר
- בקש מהמנהל להסיר את הספר (הפעולה אמורה להצליח כעת)
- בקש מהמנהל לנסות להסיר שוב את אותו הספר (הפעולה אמורה להיכשל: הספר לא נמצא)
האתגר הזה מדגים כיצד ירושה יוצרת היררכיה טבעית: מנהלים הם משתמשים בעלי הרשאות נוספות. בדיקות הבטיחות ב־removeBookFromLibrary מבטיחות את שלמות הנתונים בכך שהן מונעות הסרה של ספרים שעדיין נמצאים במחזור.
נסו בעצמכם
<?php
require_once 'Admin.php';
// קראו את הקלט
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));
// TODO: צרו Library
// TODO: צרו Admin עם ID 1 והשם "AdminUser"
// TODO: צרו User רגיל עם ID 2 והשם "RegularUser"
// TODO: צרו Book עם ה-ISBN שסופק, הכותרת והמחבר "Test Author"
// TODO: בצעו את הפעולות הבאות והדפיסו כל תוצאה בשורה חדשה:
// 1. בקשו מהאדמין להוסיף את הספר לספרייה
// 2. בקשו מהמשתמש הרגיל לשאול את הספר
// 3. בקשו מהאדמין לנסות להסיר את הספר (הפעולה אמורה להיכשל - הספר מושאל)
// 4. בקשו מהמשתמש הרגיל להחזיר את הספר
// 5. בקשו מהאדמין להסיר את הספר (הפעולה אמורה להצליח כעת)
// 6. בקשו מהאדמין לנסות להסיר שוב את אותו הספר (הפעולה אמורה להיכשל - הספר לא נמצא)
?>כל השיעורים ביחידה תכנות מונחה עצמים
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 אונליין