מאפיינים לקריאה בלבד (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 אונליין