מאפיינים לקריאה בלבד (PHP 8.1)
חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 19 מתוך 91.
ב-PHP 8.1 נוספו מאפייני readonly, שאפשר להציב בהם ערך פעם אחת בלבד ואי אפשר לשנות אותם לאחר מכן. בניגוד לקבועים, מאפיינים לקריאה בלבד מוגדרים במהלך אתחול האובייקט ולא בזמן הגדרת המחלקה.
מכריזים על מאפיין לקריאה בלבד על ידי הוספת מילת המפתח readonly לפני הצהרת הטיפוס:
<?php
class User {
public readonly string $id;
public readonly string $name;
public function __construct(string $id, string $name) {
$this->id = $id;
$this->name = $name;
}
}
$user = new User("U001", "Alice");
echo $user->id . "\n";
echo $user->name;
פלט:
U001
Aliceלאחר שהוקצתה, ניסיון לשנות מאפיין לקריאה בלבד יגרום לשגיאה. מאפיינים כאלה מושלמים לערכים שאמורים להישאר קבועים לאורך כל חיי האובייקט, כמו מזהים או חותמות זמן של יצירה.
למאפיינים לקריאה בלבד חייבת להיות הצהרת טיפוס, ואפשר להציב להם ערך פעם אחת בלבד, מתוך המחלקה שבה הם הוצהרו (בדרך כלל בבנאי). בניגוד למאפיינים רגילים, אי אפשר לתת להם ערך ברירת מחדל בעת ההצהרה. הם פועלים עם כל אחד ממגדירי הנראות:
<?php
class Product {
public function __construct(
public readonly string $sku,
private readonly float $cost
) {}
public function getCost(): float {
return $this->cost;
}
}
$product = new Product("ABC123", 29.99);
echo $product->sku;
פלט:
ABC123נקודה חשובה: מאפיינים לקריאה בלבד מספקים אי־שינוי ברמת המאפיין. הם אידיאליים לנתונים שמזהים אובייקט או שלא אמורים להשתנות לאחר יצירתו, ומשלבים את הגמישות של אתחול בזמן ריצה עם הבטיחות שבהימנעות משינויים מקריים.
אתגר
קלבואו נבנה מערכת תצורה בלתי־ניתנת לשינוי, שמשתמשת במאפייני readonly כדי לוודא שלא ניתן לשנות בטעות הגדרות קריטיות לאחר האתחול.
תיצרו שני קבצים שישתפו פעולה לניהול תצורת היישום:
Config.php: הגדירו מחלקה בשםConfigשמייצגת את תצורת היישום באמצעות הגדרות בלתי־ניתנות לשינוי. למחלקה צריכים להיות שלושה מאפייני readonly ציבוריים:string $appName,string $versionו-int $maxConnections. השתמשו בקידום מאפיינים בבנאי כדי להצהיר על שלושת מאפייני ה-readonly ולאתחל אותם בהגדרת בנאי יחידה ותמציתית. הוסיפו מתודה בשםgetInfo()שמחזירה מחרוזת בתבנית"[appName] v[version] (max: [maxConnections] connections)".main.php: כללו את קובץ המחלקה Config. יתקבלו שלושה קלטים: שם היישום, הגרסה ומספר החיבורים המרבי (כמחרוזת שצריך להמיר למספר שלם). צרו אובייקט מסוגConfigבאמצעות הערכים האלה. הדפיסו בשורה הראשונה את התוצאה שלgetInfo(). לאחר מכן, הדפיסו כל מאפיין readonly בשורה נפרדת על ידי גישה ישירה אליו: שם היישום, הגרסה ומספר החיבורים המרבי.
מאפייני readonly מבטיחים שלאחר יצירת תצורה, הערכים שלה נשארים קבועים. הדבר מתאים במיוחד להגדרות שצריכות להישאר ללא שינוי לאורך כל זמן הריצה של היישום. שימו לב כיצד שילוב של קידום מאפיינים בבנאי עם readonly מאפשר להגדיר אובייקטי ערך בלתי־ניתנים לשינוי בצורה תמציתית מאוד.
הפלט שלכם צריך להציג את מחרוזת המידע המעוצבת ולאחריה את הערך של כל מאפיין בנפרד, וכך להדגים שאפשר לקרוא מאפייני readonly גם מחוץ למחלקה.
נסו בעצמכם
<?php
require_once 'Config.php';
// קרא את ערכי הקלט
$appName = trim(fgets(STDIN));
$version = trim(fgets(STDIN));
$maxConnections = intval(trim(fgets(STDIN)));
// TODO: צור אובייקט Config באמצעות ערכי הקלט
// TODO: הדפס את התוצאה של getInfo()
// TODO: הדפס כל מאפיין readonly בשורה נפרדת:
// - שם היישום
// - גרסה
// - מספר החיבורים המרבי
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
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 אונליין