Menu
Coddy logo textTech

מאפייני מופע לעומת מאפיינים סטטיים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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 כדי להתייחס למאפיין הסטטי.

נקודה מרכזית: השתמשו במאפייני מופע כשכל אובייקט זקוק לערך משלו. השתמשו במאפיינים סטטיים כשצריך לשתף נתונים בין כל האובייקטים של מחלקה, למשל לספור מופעים או לאחסן הגדרות.

challenge icon

אתגר

קל

נבנה מערכת למעקב אחר מבקרים שמדגימה את ההבדל בין מאפייני מופע (ייחודיים לכל מבקר) לבין מאפיינים סטטיים (משותפים לכל המבקרים).

תיצור שני קבצים כדי לארגן את הקוד שלך:

  • 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
?>
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר PHP אונליין