מאפייני מופע לעומת מאפיינים סטטיים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 15 מתוך 91.
כשיוצרים מאפיין במחלקה, צריך להחליט אם הוא שייך לכל אובייקט בנפרד או למחלקה עצמה. ההבדל הזה הוא ההבדל בין מאפייני מופע למאפיינים סטטיים.
מאפייני מופע הם ברירת המחדל. כל אובייקט מקבל עותק משלו של המאפיין, ושינוי שלו באובייקט אחד אינו משפיע על אובייקטים אחרים:
<?php
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
$alice = new User("Alice");
$bob = new User("Bob");
echo $alice->name . "\n";
echo $bob->name . "\n";
פלט:
Alice
Bob
מאפיינים סטטיים שייכים למחלקה, ולא לאובייקט מסוים. מצהירים עליהם באמצעות מילת המפתח static וניגשים אליהם באמצעות שם המחלקה עם :: במקום באמצעות אובייקט עם ->:
<?php
class User {
public static $count = 0;
public $name;
public function __construct($name) {
$this->name = $name;
self::$count++;
}
}
$alice = new User("Alice");
$bob = new User("Bob");
echo User::$count;
פלט:
2
שימו לב ש-$count משותף לכל המופעים. בכל פעם שאנחנו יוצרים User חדש, משתנה ה-$count מתעדכן. בתוך המחלקה, אנחנו משתמשים ב-self::$count כדי להתייחס למאפיין הסטטי.
נקודה מרכזית: השתמשו במאפייני מופע כשכל אובייקט זקוק לערך משלו. השתמשו במאפיינים סטטיים כשצריך לשתף נתונים בין כל האובייקטים של מחלקה, למשל לספור מופעים או לאחסן הגדרות.
אתגר
קלנבנה מערכת למעקב אחר מבקרים שמדגימה את ההבדל בין מאפייני מופע (ייחודיים לכל מבקר) לבין מאפיינים סטטיים (משותפים לכל המבקרים).
תיצור שני קבצים כדי לארגן את הקוד שלך:
Visitor.php: הגדר מחלקה בשםVisitorשעוקבת אחר מבקרים בודדים ושומרת ספירה מצטברת של מספר המבקרים הכולל. לכל מבקר צריך להיות מאפיין$nameמשלו (מאפיין מופע), ואילו מאפיין$totalVisitorsצריך להיות משותף לכל המופעים (מאפיין סטטי). הבנאי מקבל שם, מגדיר אותו ומגדיל את מספר המבקרים הכולל. הוסף מתודה בשםgetInfo()שמחזירה את"[name] is visitor #[totalVisitors]".main.php: כלול את קובץ המחלקה Visitor, ואז צור שלושה מבקרים עם השמות"Alice","Bob"ו-"Charlie"(בסדר הזה). לאחר יצירת שלושתם, הדפס את התוצאה של קריאה ל-getInfo()עבור כל מבקר (כל אחד בשורה משלו), ואז הדפס את מספר המבקרים הכולל באמצעות גישה ישירה למאפיין הסטטי דרך המחלקה, בעזרתVisitor::$totalVisitors.
זכור שבתוך המחלקה ניגשים למאפיינים סטטיים באמצעות self::$propertyName, ואילו מחוץ למחלקה משתמשים ב-ClassName::$propertyName. למאפייני מופע ניגשים באמצעות $this->propertyName כרגיל.
הפלט שלך אמור להציג כל מבקר עם המספר שהוקצה לו, ולאחר מכן את המספר הכולל הסופי בשורה האחרונה.
נסו בעצמכם
<?php
// כלול את המחלקה Visitor
require_once 'Visitor.php';
// TODO: צור שלושה מבקרים בשם "Alice", "Bob" ו-"Charlie" (בסדר הזה)
// TODO: הדפס את התוצאה של getInfo() עבור כל מבקר (כל אחד בשורה נפרדת)
// TODO: הדפס את מספר המבקרים הכולל באמצעות Visitor::$totalVisitors
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
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 אונליין