Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الثوابت في الكلاسات

جزء من قسم البرمجة كائنية التوجه في رحلة PHP على Coddy. الدرس 16 من 91.

أحيانًا تحتاج إلى قيم في class يجب ألا تتغير أبدًا. توفر ثوابت class طريقة لتعريف قيم ثابتة تظل كما هي عبر جميع المثيلات ولا يمكن تعديلها بعد التصريح عنها.

تُعرِّف ثابتًا باستخدام الكلمة المفتاحية 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

النقطة الأساسية: بخلاف الخصائص الثابتة، لا يمكن تغيير constants بعد Define. وهي مثالية للقيم التي يجب أن تظل ثابتة طوال تطبيقك، مثل قيم الإعدادات، أو رموز الحالة، أو الثوابت الرياضية.

challenge icon

التحدي

سهل

لنبنِ أداةً مساعدة لتحويل درجات الحرارة تستخدم ثوابت class لتخزين قيم التحويل الثابتة التي لا تتغير مطلقًا.

ستنشئ ملفين لتنظيم التعليمات البرمجية:

  • Temperature.php: عرّف Temperature class تتولى تحويلات درجات الحرارة. يجب أن تحتوي class على ثلاثة ثوابت: FREEZING_POINT_C مضبوطة على 0، وBOILING_POINT_C مضبوطة على 100، وCONVERSION_FACTOR مضبوطة على 1.8 (وتُستخدم للتحويل من Celsius إلى Fahrenheit). أدرج الخاصية public $celsius وconstructor يقبل قيمة Celsius ويضبطها. أضف toFahrenheit() method يحوّل درجة حرارة Celsius المخزنة إلى Fahrenheit باستخدام Formula: (celsius * CONVERSION_FACTOR) + 32. أضف أيضًا getStatus() method يعيد "Freezing" إذا كانت درجة الحرارة تساوي ثابت نقطة التجمد، أو "Boiling" إذا كانت تساوي ثابت نقطة الغليان، أو "Normal" otherwise.
  • main.php: أدرج ملف Temperature class. Create ثلاثة كائنات من Temperature بالقيم 0 و100 و25. لكل درجة حرارة، اطبع تحويل Fahrenheit متبوعًا بالحالة في السطر نفسه بهذا التنسيق: "[fahrenheit]F - [status]". يجب أن تظهر كل درجة حرارة في سطر خاص بها. بعد طباعة القيم الثلاث كلها، Access ثابت BOILING_POINT_C directly من class (باستخدام Temperature::BOILING_POINT_C) واطبعه في سطر جديد.

تذكّر أن constants يتم Access إليها باستخدام self::CONSTANT_NAME inside الـclass، وباستخدام ClassName::CONSTANT_NAME من خارجها. وعلى خلاف الخصائص، لا تستخدم constants الرمز $ عند Access إليها.

جرّب بنفسك

<?php

require_once 'Temperature.php';

// TODO: أنشئ ثلاثة كائنات Temperature بالقيم 0 و 100 و 25

// TODO: لكل درجة حرارة، اطبع بالتنسيق: "[fahrenheit]F - [status]"
// كل درجة حرارة في سطرها الخاص

// TODO: الوصول إلى ثابت BOILING_POINT_C وطباعته مباشرة من الصنف
// استخدم صيغة ClassName::CONSTANT_NAME

?>
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم PHP عبر الإنترنت