נגישות       נגישות
שינוי גודל טקסט:
א א א
שינוי צבעי האתר:
? מקשי קיצור:

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

הפעלת מקשי הקיצור תלויה בדפדפן שבו אתם משתמשים.

Internet Explorer, Chrome ובגרסאות ישנות של Firefox: לחצו על מקש Alt ועל מקש המספר או האות על-פי הרשימה. ב Firefox 3 ומעלה: לחצו על המקשים Alt + Shift + המספר או האות.

S - עבור לתוכן הדף
L - חיפוש
1- עמוד הבית
2 - פרוייקטים
3 - מדריכים
4 - אודות
5 - צרו קשר
6 - הצהרת נגישות
 

מתודות קסם וקבועי קסם ב-PHP

מחבר:
בתאריך:

PHP מונחה עצמים מציע מספר מתודות קסם וקבועי קסם, שמבצעים פעולות נפוצות, תמורת עלות מסוימת בביצועים. במדריך זה אציג שלוש דוגמאות שימושיות ביותר, ובכלל כך את מתודות הקסם __construct() ו-__destruct(), ואת קבוע הקסם __CLASS__.

 

מתודת הקסם __construct()

מתודת הקסם __construct() (השם מתחיל בשני קווים תחתונים) יכולה לבצע את הפעולות הרצויות לנו מיד כשיוצרים אובייקט מהמחלקה. בקלאס הפשוט הבא, המתודה __construct() צריכה לקבל את ערך המשתנה $model

class Car
  private $model;
  public function __construct($model){
    $this -> model = $model;
  }
}

עכשיו מיד כשניצור את האובייקט עלינו להעביר לו את ערך המשתנה $model.

$newCar = new Car('מרצדס');

נציג דוגמה יותר שלמה:

<?php
class Car{
  private $model;
  //__construct
  public function __construct($model){
      $this -> model = $model;
     echo ' נבנה ' . __CLASS__ . ' האובייקט ' . '<br />';
  }
 
  public function getCarModel(){
    return ' מודל המכונית: ' . $this -> model;
  }
}
//מיד כשיוצרים את האובייקט מעבירים לו את ערך המשתנה
$newCar = new Car('מרצדס');
 
echo $newCar -> getCarModel();
?>

והתוצאה:

האובייקט Carנבנה
מודל המכונית: מרצדס

 

שימו לב לבעיה שזה יוצר, מפני שבמידה ולא נעביר פרמטר לקונסטרקטור נקבל שגיאה פטאלית. כדי למנוע את זה, נגדיר ערך דיפולטי שאותו תקבל הפונקציה __construct(). כדוגמת מחרוזת ריקה, $model = ''. אפשרות אחרת היא להגדיר את הדיפולט כ-NULL, ואז להשתמש בתנאי לוגי, שמגדיר את ערך התכונה רק אם הועבר הפרמטר. ראו דוגמה:

<?php
class Car{
  private $model = '';
  //__construct
  public function __construct($model = NULL ){
    if($model){
    $this -> model = $model;
    }
    echo ' נבנה ' . __CLASS__ . ' האובייקט ' . '<br />';
  }
 
  public function getCarModel(){
    return ' מודל המכונית: ' . $this -> model;
  }
}
//מיד כשיוצרים את האובייקט מעבירים לו את ערך המשתנה
$newCar = new Car('מרצדס');
 
echo $newCar -> getCarModel();
?>

 

קבועי קסם

בדוגמה שלמעלה השתמשנו בקבוע הקסם __CLASS__, שערכו כשם המחלקה שאליה הוא שייך.

קבועי קסם נוספים שעשויים להועיל, בפרט לצרכי דיבוג של הקוד, הם __FILE__ שהוא הנתיב המלא לקובץ, ו-__DIR__ שהוא הנתיב המלא לתיקייה שבה יושב הקוד.

 

eBook cover The essentials of Object Oriented PHP

 

מתודת הקסם __destruct()

כפי שניתן לגרום לאובייקט שרק נוצר לעשות משהו באמצעות __construct(), ניתן לעשות משהו באופן אוטומטי כשהאובייקט נהרס באמצעות מתודת הקסם __destruct(). לדוגמה:

<?php
class Car{
  private $model;
  //__construct
  public function __construct($model = NULL){
   if($model){
     $this -> model = $model;
   }
    echo ' נבנה ' . __CLASS__ . ' האובייקט ' . '<br />';
  }
  //__destruct
  public function __destruct(){
    echo ' נהרס ' . __CLASS__ . <br />';
  }
 
  public function getCarModel(){
    return ' מודל המכונית: ' . $this -> model . '<br />';
  }
}
//מיד כשיוצרים את האובייקט מעבירים לו את ערך המשתנה
$newCar = new Car('מרצדס');
 
echo $newCar -> getCarModel();
 
echo 'סוף הדף' . '<br />';  
echo '<br /><br />';
?>

והתוצאה:

האובייקט Car נבנה
מודל המכונית: מרצדס
סוף הדף
 
Car נהרס

 

הרס יזום של אובייקט באמצעות unset

כפי שראינו בדוגמה בסעיף הקודם, אובייקט מגיע לסוף חייו באופן אוטומטי, אחרי שהדף שבו הוא נמצא מסתיים. בנוסף, ביכולתנו ליזום את הרס האובייקט באמצעות unset(), הכולל את שמו של האובייקט. (שימו לב ש-unset אינו מתודת קסם אלא פונקציה רגילה שמספק לנו PHP). לדוגמה, כך עושים unset של האובייקט $newCar.

unset($newCar);

נראה את דוגמת הקוד הבאה:

<?php
class Car{
  private $model;
  //__construct
  public function __construct($model){
    $this -> model = $model;
    echo ' נבנה ' . __CLASS__ . ' האובייקט ' . '<br />';
  }
  //__destruct
  public function __destruct(){
    echo ' נהרס ' . __CLASS__ . <br />';
  }
 
  public function getCarModel(){
    return ' מודל המכונית: ' . $this -> model . <br />';
  }
}
//מיד כשיוצרים את האובייקט מעבירים לו את ערך המשתנה
$newCar = new Car('מרצדס');
 
echo $newCar -> getCarModel();
 
//הרס האובייקט
unset($newCar);

echo 'סוף הדף' . '<br />';
 
echo '<br /><br />';  
?>

והתוצאה:

האובייקט Car נבנה
מודל המכונית: מרצדס
Car נהרס
סוף הדף

כפי שניתן לראות, האובייקט נהרס לפני סוף הדף, ולא, כפי שראינו בדוגמה הקודמת, באופן אוטומטי אחרי סוף הדף.

 

לסיום, כדאי לדעת שמתודות הקסם שאינם __construct() הן שנויות ביותר במחלוקת , ולכן השימוש בהן עלול להיתקל בחוסר הבנה במקומות מסויימים ויותר גרוע מכך עלול לבלבל את המתכנת עצמו במידה ויצטרך לערוך את הקוד בעתיד.

 

המדריך מבוסס על "The essentials of Object Oriented PHP" שמלמד PHP מונחה עצמים באמצעות דוגמאות ותרגילים הקליקו על התמונה כדי לרכוש את ה-eBook:

eBook cover The essentials of Object Oriented PHP

 

לכל מדריכי ה-PHP מונחה עצמים

 

הוסף תגובה חדשה

 

= 6 + 5