Menu
Coddy logo textTech

קבועים במחלקות

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

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

challenge icon

אתגר

קל

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

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

  • 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

?>
quiz iconבחנו את עצמכם

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

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

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