Menu
Coddy logo textTech

מבוא למתודות קסם

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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 יגרום לשגיאה. המתודה הקסומה מיירטת את הפעולה הזו ומחזירה במקום זאת ייצוג כמחרוזת. בשיעורים הבאים נבחן כל מתודה קסומה בפירוט.

challenge icon

אתגר

קל

בואו נבנה מערכת קטלוג סרטים שתכיר לך שיטות קסם. תיצור מחלקת 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() תיקרא אוטומטית)

?>
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר PHP אונליין