🚀 إتقان الثوابت داخل الكلاسات (Class Constants) في PHP

بعد أن تعلمنا كيف ننشئ الكلاسات ونعرف الخصائص (Properties)، سننتقل اليوم إلى مفهوم مهم جداً وهو ثوابت الكلاس (Class Constants).

في البرمجة، هناك قيم لا نريدها أن تتغير أبداً طوال فترة تشغيل البرنامج. على سبيل المثال: قيمة ضريبة المبيعات، أو اسم التطبيق، أو سرعة الضوء. هنا يأتي دور "الثوابت".


❓ ما هي ثوابت الكلاس (Class Constants)؟ 🤔

الثابت (Constant) هو متغير خاص يتم تعريفه داخل الكلاس، ولكنه يختلف عن الخصائص العادية في نقطتين أساسيتين:

  1. القيمة ثابتة: بمجرد تحديد قيمة الثابت، لا يمكن تغييرها أو تعديلها أثناء تشغيل الكود.
  2. مرتبطة بالكلاس نفسه: الثابت لا يتبع "كائن" (Object) معين، بل يتبع "الكلاس" ككل.

💡 ملاحظة هامة: لتعريف الثابت داخل الكلاس، نستخدم الكلمة المحجوزة const بدلاً من public أو private أو var.


🛠️ كيف نقوم بتعريف الثابت؟

لتعريف ثابت داخل الكلاس، نكتب كلمة const متبوعة باسم الثابت ثم القيمة.

قاعدة ذهبية في التسمية: جرى العرف بين المبرمجين أن تُكتب أسماء الثوابت دائماً بأحرف كبيرة (UPPERCASE) لتمييزها عن المتغيرات العادية.

لنلقِ نظرة على هذا المثال البسيط:

<?php

class Circle {
    // تعريف ثابت لقيمة Pi
    const PI = 3.14;
}

?>

في المثال أعلاه، قمنا بإنشاء كلاس اسمه Circle وبداخله ثابت اسمه PI وقيمته 3.14. هذه القيمة لن تتغير أبداً مهما حدث في البرنامج.


🔍 كيف نصل إلى الثابت ونستخدمه؟

بما أن الثابت مرتبط بالكلاس وليس بالكائن (Object)، فإننا لا نستخدم السهم -> للوصول إليه. بدلاً من ذلك، نستخدم ما يسمى بـ Scope Resolution Operator وهو الرمز :: (النقطتان الرأسيتان المزدوجتان).

إليك الطريقة خطوة بخطوة:

  1. نكتب اسم الكلاس.
  2. نضع الرمز ::.
  3. نكتب اسم الثابت.

شاهد هذا المثال التطبيقي:

<?php

class Store {
    // تعريف ثابت لنسبة الضريبة
    const TAX_RATE = 0.15;
}

// الوصول إلى الثابت بدون الحاجة لإنشاء Object
echo "The tax rate is: " . Store::TAX_RATE; 

// المخرجات ستكون: The tax rate is: 0.15
?>

⚠️ الفرق بين الخصائص (Properties) والثوابت (Constants)

لكي لا تخلط بينهما، إليك هذا الجدول البسيط:

وجه المقارنة الخصائص (Properties) الثوابت (Constants)
الكلمة المستخدمة public, private, protected const
تغيير القيمة يمكن تغيير قيمتها أثناء التشغيل لا يمكن تغيير قيمتها أبداً
طريقة الوصول نستخدم السهم -> (بعد إنشاء Object) نستخدم الرمز :: (مباشرة من الكلاس)
تسمية المتغير تبدأ بعلامة $ (مثل $price) لا تبدأ بعلامة $ (مثل PRICE)

🌟 مثال شامل يجمع كل ما تعلمناه

دعونا نطبق ما تعلمناه في مثال واقعي بسيط لشركة شحن:

<?php

class ShippingCompany {
    // ثابت يمثل اسم الشركة
    const COMPANY_NAME = "FastShip Express";
    
    // ثابت يمثل تكلفة الشحن الأساسية
    const BASE_FEE = 10.0;

    public $packageWeight;

    // دالة بسيطة لحساب التكلفة
    public function calculateCost() {
        // الوصول إلى الثابت من داخل الكلاس باستخدام self::
        return self::BASE_FEE + ($this->packageWeight * 2);
    }
}

// استخدام الثوابت من خارج الكلاس
echo "Welcome to " . ShippingCompany::COMPANY_NAME; 
echo "<br>";
echo "Base Shipping Fee: " . ShippingCompany::BASE_FEE;

?>

شرح سريع للكود:

  • استخدمنا ShippingCompany::COMPANY_NAME للوصول للثابت من الخارج.
  • استخدمنا self::BASE_FEE للوصول للثابت من داخل دالة في نفس الكلاس (كلمة self تعني "هذا الكلاس").

🎓 ملخص الدرس

  • الثوابت تُعرف بكلمة const.
  • قيمتها لا تتغير أبداً بعد التعريف.
  • يتم الوصول إليها باستخدام الرمز ::.
  • تُكتب أسماؤها عادةً بأحرف كبيرة.