תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

פולימורפיזם ב-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 מונחה עצמים

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

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

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

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

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

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

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

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

דג למים הוא כמו ציפור ל...?