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

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

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

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

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

דפוס תכנותי 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 מונחה עצמים

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

 

= 5 + 2