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

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

דפוס תכנותי template ב-PHP

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

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

 

הבעיה: שכפול קוד

בואו נתחיל משתי המחלקות הבאות שמייצרות eBook וספר רגיל עשוי נייר.

// Class to generate paperback books.
class Paperback {
 private $title   = "";
 private $content = "";
     
 function setTitle( $str )
 {
  $this->title = $str;
 }
    
 function setContent( $str )
 {
  $this->content = $str;
 }
     
 function printBook()
 {
  var_dump("The book '{$this->title}' was printed.");
 }
}
 
// Class to generate eBooks.
class Ebook {
 private $title   = "";
 private $content = "";
     
 function setTitle( $str )
 {
  $this->title = $str;
 }
    
 function setContent( $str )
 {
  $this->content = $str;
 }
     
 function generatePdf()
 {
  var_dump("A PDF was generated for the eBook '{$this->title}'.");
 }
}

רוב הקוראים ודאי מודאגים משכפול הקוד מפני ששתי המחלקות כוללות את המשתנים הפרטיים title$ ו- content$, וגם את המתודות שמגדירות את המשתנים האלה, setTitle ו-setContent.

 

הפתרון: מחלקה אבסטרקטית

הדפוס התכנותי template מציע לפתור את השכפול על ידי כתיבת מחלקה אבסטרקטית (Book), שתכיל את הקוד המשותף, וששתי המחלקות ירשו ממנה.

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

// The abstract parent class.
abstract class Book {
 protected $title;
 protected $content;
     
 function setTitle( $str )
 {
  $this->title = $str;
 }
   
 function setContent( $str )
 {
  $this->content = $str;
 }
}
  
class Paperback extends Book {
       
 function printBook()
 {
  var_dump("The book '{$this->title}' was printed.");
 }
}
  
class Ebook extends Book {
       
 function generatePdf()
 {
  var_dump("A PDF was generated for the eBook '{$this->title}'.");
 }
}

נבחן את הקוד שכתבנו:

$paperback = new Paperback;
 
$paperback -> setTitle("The greatest paperback ever");
$paperback -> printBook();

והתוצאה היא:

string "The book 'The greatest paperback ever' was printed." (length=51)

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

 

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

 

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

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

 

 

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

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

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

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

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

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

 

 

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

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