PHP, כמו שפות תכנות רבות אחרות מונחה עצמים, תומך בבוני מחלקות והרסים.
קונסטרוקטור הוא א פונקציה ספציפית שמופעל אוטומטית כאשר אובייקט מחלקה נוצר. הפונקציה העיקרית של בנאי היא לאתחל את מאפייני האובייקט ולהגדיר אותם לערכי ברירת מחדל או לערכים המסופקים כארגומנטים כאשר האובייקט נוצר. בנאים מוצהרים ב-PHP עם תחביר הקו התחתון הכפול (__) והביטוי "construct". "__construct" חייב להיות השם של שיטת הקונסטרוקטור. הנה דוגמה לבנאי בפעולה במחלקה "Pet":
class Pet {
public $nick_name;
public $color;
function __construct($name, $color) {
$this->nick_name = $name;
$this->color = $color;
}
function get_name() {
return $this->nick_name;
}
function get_color() {
return $this->color;
}
}
$cat = new Pet("Whiskers", "Black");
echo $cat->get_name();
echo "<br>";
echo $cat->get_color();
כאשר אנו יוצרים אובייקט "חיות מחמד" חדש ומכניסים "שפמים" ו"שחור" כפרמטרים, הקונסטרוקטור מגדיר את מאפייני ה"כינוי" ו"צבע" של האובייקט ל"שפם" ו"שחור", בהתאמה. לאחר מכן ניתן לאחזר את הערכים של תכונות אלה באמצעות שיטות "קבל שם" ו"קבל צבע".
הרס, לעומת זאת, הוא הליך מסוים שמופעל בכל פעם שאובייקט מושמד או מוסר מהזיכרון. תפקידו העיקרי הוא לשחרר משאבים שהאובייקט ניצל, כגון סיום חיבורי מסד נתונים או ניקוי זיכרון. משמידים מוצהרים ב-PHP עם תחביר הקו התחתון הכפול (__) והמילה "הרוס". "__destruct" חייב להיות השם של שיטת ההרס. הנה דוגמה של משמיד כיתות בפעולה:
class Pet {
public $nick_name;
public $color;
function __construct($name, $color) {
$this->nick_name = $name;
$this->color = $color;
}
function get_name() {
return $this->nick_name;
}
function get_color() {
return $this->color;
}
function __destruct() {
echo "Goodbye, " . $this->nick_name . "!<br>";
}
}
$cat = new Pet("Whiskers", "Black");
echo $cat->get_name();
echo "<br>";
echo $cat->get_color();
בדוגמה זו, כאשר הסקריפט מסתיים או האובייקט "חיית המחמד" מושמד, המשמיד מופעל מיד ומציג "להתראות, שפם!" על המסך.
חיוני להבין שב-PHP, בנאים והרסנים אינם מבוצעים באופן ידני; הם נקראים אוטומטית כאשר אובייקט נוצר או נהרס. אתה יכול גם לציין ערכי ברירת מחדל עבור ארגומנטים של בנאי. לדוגמה, אם אתה רוצה שהפרמטר השני של הבנאי יהיה אופציונלי, אתה יכול להגדיר ערך ברירת מחדל כך:
function __construct($name,$color = "Black") {
$this->nick_name = $name;
$this->color = $color;
}
בדוגמה זו, אם לא ערך עבור הפרמטר השני מסופק כאשר האובייקט נוצר, המאפיין "צבע" יוגדר אוטומטית ל"שחור".
חשוב גם לציין שאם כיתת ילד מאריכה כיתת הורים ורוצה שיחה בנאי מחלקת האב בבנאי משלו, הוא יכול להשתמש בתחביר "parent::__construct()" כדי לעשות זאת. אם לכיתה הבת אין בנאי משלה, הבנאי של מחלקת האב יעבור בירושה כפונקציה רגילה, אלא אם כן הוא הוכרז כפרטי.
לסיכום, בונים והורסים הן שיטות מיוחדות המשמשות לאתחול ושחרור משאבים עבור אובייקטים ב-PHP. הם נקראים אוטומטית כאשר אובייקט נוצר או מושמד וניתן להשתמש בהם כדי להגדיר ערכי ברירת מחדל עבור מאפייני אובייקט או לביצוע משימות אחרות.
שאלות ותשובות
ש: מהו בנאי ב-PHP?
ת: בנאי הוא פונקציה ספציפית שמופעלת אוטומטית כאשר אובייקט מחלקה נוצר. תפקידו העיקרי הוא לאתחל את מאפייני האובייקט, להגדיר אותם לערכי ברירת מחדל או לערכים המסופקים כארגומנטים בעת יצירת האובייקט. בנאים מצוינים באמצעות תחביר הקו התחתון הכפול (__) יחד עם המילה "construct", ושם שיטת הבנאי חייב להיות "__construct".
ש: כיצד מוכרז בנאי ב-PHP?
ת: בנאים מוצהרים ב-PHP עם תחביר הקו התחתון הכפול (__) והביטוי "construct". "__construct" חייב להיות השם של שיטת הקונסטרוקטור.
ש: מה המטרה של הרס ב-PHP?
ת: כאשר אובייקט מושמד או נמחק מהזיכרון, שיטת הרס מופעלת אוטומטית. תפקידו העיקרי הוא לשחרר משאבים שהאובייקט ניצל, כגון סיום חיבורי מסד נתונים או ניקוי זיכרון.
ש: איך מכריזים על משמיד ב-PHP?
ת: ב-PHP, הרסנים מוצהרים באמצעות תחביר הקו התחתון הכפול (__) יחד עם המילה "הרס". השם של שיטת ההרס חייב להיות "__destruct".
ש: האם עלינו לקרוא לבנאים והרסנים באופן ידני ב-PHP?
ת: לא, בנאים והרסנים נקראים אוטומטית כאשר אובייקט נוצר או נהרס ואין צורך לקרוא להם באופן ידני.
ש: האם נוכל להגדיר ערכי ברירת מחדל עבור פרמטרי בנאי ב-PHP?
ת: כן, אנחנו יכולים להשתמש ב-PHP כדי לקבוע ערכי ברירת מחדל עבור ארגומנטים של בנאי. לדוגמה, אם אתה רוצה שהפרמטר השני של הבנאי יהיה אופציונלי, אתה יכול להגדיר ערך ברירת מחדל כך:
function __construct($name, $color = "Black") {
$this->nick_name = $name;
$this->color = $color;
}
ש: איך מחלקת ילד יכולה לקרוא לבנאי מחלקת האב ב-PHP?
ת: אם מחלקת ילד מרחיבה מחלקה אב ורוצה לקרוא לבנאי מחלקת האב בבנאי משלה, היא יכולה להשתמש בתחביר "parent::__construct()" כדי לעשות זאת.
תרגילים:
- צור מחלקה בשם "מכונית" עם מאפיינים עבור "מייק", "דגם" ו"שנה" ובנאי שקובע את הערכים הללו כאשר אובייקט חדש נוצר.
- הוסף שיטה למחלקה "Car" בשם "getDetails" שמחזירה את המותג, הדגם והשנה של המכונית כמחרוזת.
- צור כיתת ילד בשם "ElectricCar" שמרחיבה את המחלקה "Car" ויש לה מאפיין נוסף עבור "batteryLife" ובנאי שקובע את הערך הזה.
- הוסף שיטה למחלקה "ElectricCar" בשם "getBatteryLife" שמחזירה את הערך של המאפיין "batteryLife".
- צור אובייקט ממחלקת "ElectricCar" והשתמש בשיטות שיצרת כדי להציג את הפרטים וחיי הסוללה של המכונית.
תשובות:
1.
class Car {
public $make;
public $model;
public $year;
function __construct($make, $model, $year) {
$this->make = $make;
$this->model = $model;
$this->year = $year;
}
}
2.
class Car {
public $make;
public $model;
public $year;
function __construct($make, $model, $year) {
$this->make = $make;
$this->model = $model;
$this->year = $year;
}
function getDetails() {
return $this->make . " " . $this->model . " " . $this->year;
}
}
3.
class ElectricCar extends Car {
public $batteryLife;
function __construct($make, $model, $year, $batteryLife) {
parent::__construct($make, $model, $year);
$this->batteryLife = $batteryLife;
}
}
4.
class ElectricCar extends Car {
public $batteryLife;
function __construct($make, $model, $year, $batteryLife) {
parent::__construct($make, $model, $year);
$this->batteryLife = $batteryLife;
}
function getBatteryLife() {
return $this->batteryLife;
}
}
5.
$electricCar = new ElectricCar("Tesla", "Model S", 2022, 300);
echo $electricCar->getDetails();
echo "<br>";
echo "Battery Life: " . $electricCar->getBatteryLife();