קידום פרמטרים בבנאי (8.0)
חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 42 מתוך 91.
PHP 8.0 הציגה קידום מאפיינים בבנאי, תכונה שמפחיתה באופן משמעותי את קוד התבניתי בעת הגדרת מחלקות. במקום להצהיר על מאפיינים בנפרד ואז להש assign אותם בבנאי, אפשר לעשות את שניהם בצעד אחד.
זו הגישה המסורתית שבה השתמשת עד עכשיו:
<?php
class Product {
private string $name;
private float $price;
public function __construct(string $name, float $price) {
$this->name = $name;
$this->price = $price;
}
public function getInfo(): string {
return $this->name . ": $" . $this->price;
}
}
עם קידום בנאי, מוסיפים את משנה הגישה ישירות לפרמטרים של הבנאי:
<?php
class Product {
public function __construct(
private string $name,
private float $price
) {}
public function getInfo(): string {
return $this->name . ": $" . $this->price;
}
}
$product = new Product("Laptop", 999.99);
echo $product->getInfo();
פלט:
Laptop: $999.99על ידי הוספת private, protected או public לפני פרמטר של בנאי, PHP יוצרת באופן אוטומטי את המאפיין ומשייכת אליו את הערך. אפשר לשלב פרמטרים מקודמים ורגילים באותו בנאי, ועדיין להוסיף לוגיקה בתוך גוף הבנאי לפי הצורך.
נקודה מרכזית: קידום מאפיינים בבנאי מבטל הצהרות והשמות חוזרות ונשנות של מאפיינים, והופך את המחלקות שלך לנקיות יותר וקלות יותר לקריאה, תוך שמירה על שליטה מלאה בכימוס.
אתגר
קלנבנה מערכת לניהול אנשי קשר שמציגה את האלגנטיות של קידום מאפיינים בבנאי. תיצור מחלקת PHP נקייה ומודרנית שמייתרת קוד תבניתי תוך שמירה על כימוס תקין.
תארגן את הקוד בשני קבצים:
Contact.php: צור מחלקתContactבאמצעות קידום מאפיינים בבנאי, כדי להגדיר את כל המאפיינים ישירות בחתימת הבנאי. לאיש הקשר שלך יהיו:- מאפיין פרטי
$name(מחרוזת) - מאפיין פרטי
$email(מחרוזת) - מאפיין פרטי
$phone(מחרוזת) עם ערך ברירת מחדל של"Not provided"
getFullDetails()שמחזירה"[name] | [email] | [phone]". הוסף גם מתודהgetSummary()שמחזירה"Contact: [name]".- מאפיין פרטי
main.php: כלול את קובץ Contact. יתקבלו שלוש קלטים: שם, כתובת דוא"ל ומספר טלפון. צור שני מופעים שלContact:- איש הקשר הראשון צריך להשתמש בכל שלושת הערכים (שם, כתובת דוא"ל ומספר טלפון)
- איש הקשר השני צריך להשתמש רק בשם ובכתובת הדוא"ל (ולהסתמך על ערך ברירת המחדל של מספר הטלפון)
- הפרטים המלאים של איש הקשר הראשון
- הסיכום של איש הקשר הראשון
- הפרטים המלאים של איש הקשר השני
- הסיכום של איש הקשר השני
שים לב כיצד קידום מאפיינים בבנאי מאפשר לך להגדיר מאפיינים, לקבוע את מידת הנראות שלהם, להצהיר על הטיפוסים שלהם ולהקצות להם ערכים — הכול בחתימת בנאי אחת, קריאה וברורה. הפרמטר האופציונלי phone עם ערך ברירת מחדל מדגים שפרמטרים שמקודמים בבנאי פועלים בצורה חלקה עם ערכי ברירת מחדל, בדיוק כמו פרמטרים רגילים.
נסו בעצמכם
<?php
require_once 'Contact.php';
// קרא את הקלט
$name = trim(fgets(STDIN));
$email = trim(fgets(STDIN));
$phone = trim(fgets(STDIN));
// TODO: צור את איש הקשר הראשון עם כל שלושת הערכים (name, email, phone)
// TODO: צור את איש הקשר השני עם name ו-email בלבד (השתמש בערך ברירת המחדל עבור phone)
// TODO: הדפס את הפרטים המלאים של איש הקשר הראשון
// TODO: הדפס את התקציר של איש הקשר הראשון
// TODO: הדפס את הפרטים המלאים של איש הקשר השני
// TODO: הדפס את התקציר של איש הקשר השני
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים (OOP)
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח $thisמתודותמאפייניםבנאי (__construct)הורס (__destruct)חזרה: מחשבון פשוט4ירושה
ירושה בסיסיתמילת המפתח parent::דריסת מתודותמילת המפתח finalמחלקות מופשטותסיכום – היררכיית עובדים7כימוס
ציבורי, מוגן, פרטימפרטי גישה לעומקמתודות גישה ועדכוןהסתרת מידעקידום פרמטרים בבנאי (8.0)סיכום – מערכת רישומי תלמידים2מרחבי שמות וטעינה אוטומטית
מבוא למרחבי שמותמילת המפתח useתקן הטעינה האוטומטית PSR-4הטוען האוטומטי של Composerסיכום – פרויקט מאורגן5ממשקים וחוזים
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםממשק לעומת מחלקה מופשטתרמזי טיפוסים עם ממשקיםסיכום - מחשבון צורות8מתודות קסם
מבוא למתודות קסם__toString ו־__debugInfo__get, __set, __isset, __unset__call ו־__callStatic__clone ושיבוט אובייקטים__serialize ו־__unserializeסיכום – אוסף מותאם אישית3מאפייני מחלקה
מאפייני מופע לעומת מאפיינים סטטייםקבועים במחלקותמתודות ומאפיינים סטטייםמאפיינים פרטיים ומוגניםמאפיינים לקריאה בלבד (PHP 8.1)סיכום – מנהל חשבון בנק6פולימורפיזם
בחינה מחדש של דריסת מתודותפולימורפיזם באמצעות ממשקיםרמזי טיפוסים וטיפוסי איחודקישור סטטי מאוחרסיכום — מעבד תשלומיםתרגלו בעצמכם: קומפיילר PHP אונליין