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

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

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

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

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

פולימורפיזם ב-PHP

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

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

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

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

 

eBook cover The essentials of Object Oriented PHP

 

כדי להבטיח שאכן המחלקות יישמו את עיקרון הפולימורפיזם אנו יכולים להיעזר באחת משתי שיטות:

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

interface, שדורש מכל המחלקות שמיישמות אותו, להגדיר פונקציה מסוימת.

בדוגמה הבאה, ה-interface ששמו Shape מכתיב לכל המחלקות שיישמו אותו להגדיר את הפונקציה calc_area.

interface Shape{
  public function calc_area();
}

בהתאם, המחלקה Circle, שמיישמת את ה-interface, תגדיר את הפונקציה calc_area עם פונקציה לחישוב שטח מעגל:

class Circle implements Shape{
  private $radius;
  
  public function __construct($radius){
    $this -> radius = $radius;
  }
  
  public function calc_area(){
    return $this -> radius * $this -> radius * pi();
  }
}

גם המחלקה Rectangle, שמיישמת את ה-interface, תגדיר את הפונקציה calc_area, אבל עם שיטת חישוב שמתאימה למלבן:

class Rectangle implements Shape{
  private $width;
  private $height;
  
  public function __construct($width, $height){
    $this -> width = $width;
    $this -> height = $height;
  }
  
  public function calc_area(){
    return $this -> width * $this -> height;
  }
}

ניצור אובייקטים מהמחלקות:

$circ = new Circle(3);
$rect = new Rectangle(3,4);

אנחנו יכולים להיות בטוחים שכול האובייקטים מחשבים את השטח באמצעות פונקציה ששמה calc_area , בין אם מדובר באובייקט של מלבן או באובייקט עיגול, מפני שהם מיישמים את אותו interface. לפיכך:

echo $circ->calc_area();//12
echo $rect->calc_area();//28.26

 

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

eBook cover The essentials of Object Oriented PHP

 

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

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

 

= 4 + 9