מבוא למתודות קסם
חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 44 מתוך 91.
שיטות קסם הן שיטות מיוחדות ב-PHP שמתחילות בשני קווים תחתונים (__) ונקראות אוטומטית על ידי PHP בתגובה לאירועים או לפעולות מסוימים. כבר השתמשת בשתיים מהן: __construct() ו-__destruct().
השיטות האלה מאפשרות לך להתחבר להתנהגות הפנימית של PHP ולהתאים אישית את האופן שבו האובייקטים שלך מגיבים לפעולות נפוצות.
לדוגמה, מה קורה כשמנסים להדפיס אובייקט? או לגשת למאפיין שאינו קיים? מתודות קסם מאפשרות לך לשלוט במצבים האלה.
הנה סקירה מהירה של שיטות הקסם הנפוצות ביותר:
| מתודה | מופעלת כאשר |
|---|---|
__construct() | נוצר אובייקט |
__destruct() | אובייקט מושמד |
__toString() | נעשה שימוש באובייקט כמחרוזת |
__get() | ניגשים למאפיין שאינו מוגדר |
__set() | מגדירים מאפיין שאינו מוגדר |
__call() | קוראים למתודה שאינה מוגדרת |
__clone() | אובייקט משוכפל |
<?php
class Book {
public function __construct(
private string $title
) {}
public function __toString(): string {
return "Book: " . $this->title;
}
}
$book = new Book("PHP Mastery");
echo $book;
פלט:
Book: PHP Masteryללא __toString(), ניסיון להדפיס אובייקט באמצעות echo יגרום לשגיאה. המתודה הקסומה מיירטת את הפעולה הזו ומחזירה במקום זאת ייצוג כמחרוזת. בשיעורים הבאים נבחן כל מתודה קסומה בפירוט.
אתגר
קלבואו נבנה מערכת קטלוג סרטים שתכיר לך שיטות קסם. תיצור מחלקת Movie שמשתמשת ב־__construct() כדי לאתחל את נתוני הסרט וב־__toString() כדי לספק ייצוג מחרוזת ברור כשהאובייקט מודפס.
תארגן את הקוד שלך בשני קבצים:
Movie.php: צור מחלקתMovieשמייצגת סרטים בקטלוג שלך. השתמש בקידום פרמטרים בבנאי כדי להגדיר מאפיינים פרטיים עבור$title(מחרוזת),$director(מחרוזת) ו־$year(מספר שלם). ממש את שיטת הקסם__toString()כדי להחזיר מחרוזת מעוצבת:"[title] ([year]) - Directed by [director]". כך אפשר להדפיס ישירות את אובייקטי הסרט שלך, בלי לקרוא לשיטה נפרדת.main.php: כלול את קובץ Movie. יתקבלו שלושה קלטים: כותרת הסרט, שם הבמאי ושנת ההפצה. צור מופע שלMovieבאמצעות הערכים האלה (המר את השנה למספר שלם). לאחר מכן פשוט הדפס ישירות את אובייקט הסרט: השיטה__toString()תיקרא אוטומטית כדי להפיק את הפלט.
הקסם של __toString() הוא ש־PHP קוראת לה אוטומטית בכל פעם שמשתמשים באובייקט שלך בהקשר של מחרוזת. במקום לכתוב echo $movie->getInfo();, אפשר פשוט לכתוב echo $movie; ו־PHP מטפלת בהמרה עבורך. כך נוח ואינטואיטיבי יותר לעבוד עם האובייקטים שלך.
נסו בעצמכם
<?php
require_once 'Movie.php';
// קראו את הקלט
$title = trim(fgets(STDIN));
$director = trim(fgets(STDIN));
$year = intval(fgets(STDIN));
// TODO: צרו מופע של Movie באמצעות ערכי הקלט
// TODO: הדפיסו את אובייקט הסרט ישירות (המתודה __toString() תיקרא אוטומטית)
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
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סיכום – אוסף מותאם אישית3מאפייני מחלקה
מאפייני מופע לעומת מאפיינים סטטייםקבועים במחלקותמתודות ומאפיינים סטטייםמאפיינים פרטיים ומוגניםמאפיינים לקריאה בלבד (PHP 8.1)סיכום – מנהל חשבון בנק6פולימורפיזם
בחינה מחדש של דריסת מתודותפולימורפיזם באמצעות ממשקיםרמזי טיפוסים וטיפוסי איחודקישור סטטי מאוחרסיכום — מעבד תשלומיםתרגלו בעצמכם: קומפיילר PHP אונליין