קבועים במחלקות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 16 מתוך 91.
לפעמים יש צורך בערכים במחלקה שאסור לשנות לעולם. קבועים במחלקה מאפשרים להגדיר ערכים קבועים שנשארים זהים בכל המופעים ואי אפשר לשנות אותם לאחר ההכרזה.
מגדירים קבוע באמצעות מילת המפתח const בתוך מחלקה. לפי המוסכמה, שמות של קבועים נכתבים באותיות רישיות:
<?php
class Circle {
const PI = 3.14159;
public $radius;
public function __construct($radius) {
$this->radius = $radius;
}
public function area() {
return self::PI * $this->radius * $this->radius;
}
}
$circle = new Circle(5);
echo $circle->area();
פלט:
78.53975בדומה למאפיינים סטטיים, קבועים שייכים למחלקה ולא לאובייקטים נפרדים. ניגשים אליהם באמצעות self::CONSTANT_NAME בתוך המחלקה או באמצעות ClassName::CONSTANT_NAME מחוץ לה:
<?php
class HttpStatus {
const OK = 200;
const NOT_FOUND = 404;
const SERVER_ERROR = 500;
}
echo HttpStatus::OK . "\n";
echo HttpStatus::NOT_FOUND;
פלט:
200
404נקודה מרכזית: בניגוד למאפיינים סטטיים, אי אפשר לשנות קבועים לאחר שהוגדרו. הם אידיאליים לערכים שצריכים להישאר קבועים לאורך כל היישום שלך, כגון ערכי תצורה, קודי סטטוס או קבועים מתמטיים.
אתגר
קלבוא נבנה כלי להמרת טמפרטורות שמשתמש בקבועים של מחלקה כדי לאחסן ערכי המרה קבועים שלא משתנים לעולם.
תיצור שני קבצים כדי לארגן את הקוד שלך:
Temperature.php: הגדר מחלקה בשםTemperatureשמטפלת בהמרות טמפרטורה. למחלקה צריכים להיות שלושה קבועים:FREEZING_POINT_Cשערכו0,BOILING_POINT_Cשערכו100ו-CONVERSION_FACTORשערכו1.8(משמש להמרה מצלזיוס לפרנהייט). כלול מאפייןpublic $celsiusובנאי שמקבל את ערך צלזיוס ומגדיר אותו. הוסף מתודה בשםtoFahrenheit()שממירה את טמפרטורת צלזיוס המאוחסנת לפרנהייט באמצעות הנוסחה:(celsius * CONVERSION_FACTOR) + 32. הוסף גם מתודה בשםgetStatus()שמחזירה"Freezing"אם הטמפרטורה שווה לקבוע של נקודת הקיפאון,"Boiling"אם היא שווה לקבוע של נקודת הרתיחה, או"Normal"אחרת.main.php: כלול את קובץ המחלקה Temperature. צור שלושה אובייקטים של Temperature עם הערכים0,100ו-25. עבור כל טמפרטורה, הדפס את ההמרה לפרנהייט ולאחריה את המצב באותה השורה, בפורמט הזה:"[fahrenheit]F - [status]". כל טמפרטורה צריכה להופיע בשורה משלה. לאחר הדפסת שלושתן, גש ישירות לקבועBOILING_POINT_Cמתוך המחלקה (באמצעותTemperature::BOILING_POINT_C) והדפס אותו בשורה חדשה.
זכור שניגשים לקבועים באמצעות self::CONSTANT_NAME בתוך המחלקה ו-ClassName::CONSTANT_NAME מחוץ לה. בניגוד למאפיינים, לא משתמשים בסמל $ כשניגשים לקבועים.
נסו בעצמכם
<?php
require_once 'Temperature.php';
// TODO: צרו שלושה אובייקטים מסוג Temperature עם הערכים 0, 100 ו-25
// TODO: עבור כל טמפרטורה, הדפיסו בפורמט: "[fahrenheit]F - [status]"
// כל טמפרטורה בשורה נפרדת
// TODO: גשו לקבוע BOILING_POINT_C והדפיסו אותו ישירות מהמחלקה
// השתמשו בתחביר ClassName::CONSTANT_NAME
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
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 אונליין