מחלקות ספר ומשתמש
חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 83 מתוך 91.
אתגר
קלבואו נבנה את הבסיס של מערכת ניהול הספרייה שלנו באמצעות יצירת המחלקות Book ו־User. אובייקטים מרכזיים אלה בתחום יעבדו יחד כדי לנהל את פעולות הספרייה.
תארגנו את הקוד שלכם בשלושה קבצים:
Book.php: צרו מחלקה בשםBookשעוקבת אחר ספרי הספרייה. למחלקת הספר יהיה שלוש תכונות readonly שיוגדרו באמצעות קידום פרמטרים בבנאי:isbn,titleו־author. כללו תכונה פרטית$isAvailableשערכה ההתחלתי הואtrue. הוסיפו שלוש מתודות:isAvailable(): bool: מחזירה את מצב הזמינותmarkAsBorrowed(): void: מגדירה את הזמינות ל־falsemarkAsReturned(): void: מגדירה את הזמינות ל־true
User.php: כללו את קובץ Book וצרו מחלקה בשםUserשמייצגת חברים בספרייה. למשתמש יהיו שתי תכונות readonly באמצעות קידום פרמטרים בבנאי:id(מספר שלם) ו־name(מחרוזת). כללו מערך פרטי$borrowedBooks(ריק בתחילה) וקבוע בשםMAX_BOOKSשערכו3. הוסיפו את המתודות הבאות:getBorrowedBooks(): array: מחזירה את מערך הספרים שהושאלוcanBorrow(): bool: מחזירה true אם המשתמש שאל פחות ספרים מ־MAX_BOOKSaddBook(Book $book): void: מוסיפה ספר למערך הספרים שהושאלוremoveBook(string $isbn): void: מסירה ספר לפי ISBN באמצעותarray_filter
main.php: כללו את קובץ User והפעילו את המחלקות שלכם. תקבלו ארבעה קלטים: מזהה משתמש, שם משתמש, ISBN של ספר וכותרת הספר (המחבר יהיה"Unknown").צרו
Userו־Bookעם הערכים שסופקו. הדפיסו אם המשתמש יכול לשאול ספר בתחילה, ואז אפשרו למשתמש לשאול את הספר (סמנו אותו כמושאל והוסיפו אותו לרשימת הספרים של המשתמש). לבסוף, הדפיסו את זמינות הספר ואת מספר הספרים שהושאלו.תבנית הפלט:
Can borrow: [yes/no] Book available: [yes/no] Books borrowed: [count]
שימו לב כיצד כימוס מגן על המצב הפנימי: הזמינות של ספר משתנה רק באמצעות מתודות ייעודיות, והספרים שהושאלו על ידי משתמש מנוהלים באמצעות גישה מבוקרת. הבסיס הזה יתמוך במערכת ההשאלה שנבנה בהמשך.
נסו בעצמכם
<?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 עם ה-id והשם שסופקו
// TODO: צור אובייקט Book עם ה-isbn, הכותרת והמחבר שסופקו
// TODO: הדפס אם המשתמש יכול לשאול ספר בתחילה
// פורמט: "Can borrow: yes" או "Can borrow: no"
// TODO: גרום למשתמש לשאול את הספר:
// - סמן את הספר כמושאל
// - הוסף את הספר לרשימת הספרים שהמשתמש שאל
// TODO: הדפס אם הספר זמין
// פורמט: "Book available: yes" או "Book available: no"
// TODO: הדפס את מספר הספרים שהושאלו
// פורמט: "Books borrowed: [count]"
?>כל השיעורים ביחידה תכנות מונחה עצמים
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 אונליין