PHP Constants – الثوابت في PHP

🔹 ما هي الثوابت؟

الثابت هو متغير لا تتغير قيمته أبدًا بعد تعريفه.

✳️ بعكس المتغير (variable)، لا يمكن إعادة تعيين قيمة للثابت بعد تعريفه.

📌 لماذا نستخدم الثوابت؟
  • لتخزين قيم ثابتة نستخدمها في كل المشروع مثل:
    اسم الموقع، عنوان الشركة، الحد الأقصى للمستخدمين، إعدادات الاتصال بقاعدة البيانات…
  • تحسين تنظيم الكود.
  • سهولة التعديل لاحقًا (من مكان واحد فقط).
🛠️ طريقة تعريف الثوابت:
✅ الطريقة القديمة (باستخدام define):
define("SITE_NAME", "كلاود سوفت");
echo SITE_NAME;
PHP

✔️ define() تُستخدم بدون $
❌ لا يمكن تغيير القيمة لاحقًا

✅ الطريقة الحديثة (باستخدام const):
const VERSION = "1.0";
echo VERSION;
PHP

🔸 تُستخدم داخل الملفات أو الكلاسات
🔸 لا تحتاج دالة مثل define
🔸 أسرع قليلاً في الأداء

⚖️ مقارنة بين define() و const:
المقارنةdefine()const
زمن التنفيذوقت التشغيل (runtime)وقت الترجمة (compile time)
إمكانية استخدامها داخل كلاس❌ لا✅ نعم
دعمها في الإصداراتأقدم وتدعم PHP 4PHP 5.3 أو أحدث
هل تحتاج $؟❌ لا❌ لا
💡 ملاحظات مهمة:
  • أسماء الثوابت عادةً تكون بحروف كبيرة (عادةً، وليست إلزامية).
define("MAX_USERS", 100);
PHP
  • لا يمكن إعادة تعيينها:
define("MAX_USERS", 100);
MAX_USERS = 200; // ❌ خطأ!
PHP
📘 أمثلة عملية:
<?php
define("APP_NAME", "نظام الطلاب");
const MAX_LOGIN_ATTEMPTS = 5;

echo APP_NAME . "<br>";          // نظام الطلاب
echo MAX_LOGIN_ATTEMPTS . "<br>"; // 5
?>
PHP
🔐 هل الثوابت حساسة لحالة الأحرف (Case-Sensitive)؟
define() ❗ قد تكون غير حساسة إذا طلبت ذلك:
define("SITE", "كلاود", true); // الثالث = case-insensitive (غير مستحب!)
echo site; // سيعمل
PHP

لكن ⚠️ هذه الميزة أصبحت مهجورة ومحذوفة من الإصدارات الحديثة. الأفضل: اجعلها حساسة.

🧠 فوائد استخدام الثوابت:
الفائدةالتوضيح
🔁 ثبات القيملا يمكن تغيير القيمة بالخطأ
🧹 وضوح الكودعندما ترى SITE_NAME تعرف فورًا معناها
📦 مركزية الإعداداتتعريف كل الإعدادات العامة بمكان واحد
📉 أفضل أداء من المتغيرات في بعض الحالات
⚠️ محاذير للمبتدئين:
التحذيرالتوضيح
❌ لا تستخدم $ قبل اسم الثابتecho $SITE_NAME; ← خطأ
❌ لا تحاول تغيير قيمة ثابتستظهر لك خطأ
❌ لا تعرّف الثابت بنفس اسم متغيرقد يؤدي إلى التباس في الكود
📌 متى نستخدم const بدل define؟
  • داخل الكلاسات: استخدم const
  • لتحديد ثوابت بسيطة في بداية الكود: استخدم define
  • للمشاريع الكبيرة: استخدم const لجعل الكود أكثر وضوحًا وقوة
🧪 تمرين للمبتدئين:

قم بتعريف ثوابت تمثل:

  • اسم الموقع
  • إصدار البرنامج
  • الحد الأقصى للمحاولات
  • هل التسجيل مسموح (true أو false)

✅ الحل:

<?php
define("SITE_NAME", "أكاديمية كلاود");
const VERSION = "2.1";
const MAX_ATTEMPTS = 3;
const REGISTRATION_ALLOWED = true;

echo SITE_NAME . "<br>";
echo VERSION . "<br>";
echo MAX_ATTEMPTS . "<br>";
echo REGISTRATION_ALLOWED ? "مسموح" : "ممنوع";
?>
PHP
✅ توصياتي لك كمتدرب PHP:

لا تخلط بينها وبين المتغيرات العادية في المنطق البرمجي

ابدأ بتعريف الثوابت في ملف خاص مثل config.php

استخدم أسماء واضحة ومعبرة

اجعل الثوابت في أعلى الكود لتسهل إدارتها

🔹 أولاً: Predefined Constants (الثوابت المعرفة مسبقًا)
✅ ما هي؟

هي ثوابت جاهزة داخل PHP، يمكن استخدامها مباشرة بدون تعريفها.

🧪 أمثلة شائعة:
الثابتالوصف
PHP_VERSIONإصدار PHP الحالي
PHP_OSنظام التشغيل الذي تعمل عليه PHP
PHP_INT_MAXأكبر رقم صحيح ممكن في PHP
DIRECTORY_SEPARATORيعطي / أو \ حسب نظام التشغيل
E_ALLيستخدم مع إعدادات الأخطاء (error reporting)
🔍 مثال عملي:
echo "إصدار PHP: " . PHP_VERSION . "<br>";
echo "نظام التشغيل: " . PHP_OS . "<br>";
PHP

🔸 النتيجة:

إصدار PHP: 8.2.1  
نظام التشغيل: Linux
PHP
⚠️ ملاحظات:
  • لا يمكن تغيير قيمة هذه الثوابت.
  • مفيدة لمعرفة بيئة السيرفر أو ضبط الإعدادات.
🪄 ثانيًا: Magic Constants (الثوابت السحرية)
✅ ما هي؟

هي ثوابت تتغير قيمتها حسب مكان استخدامها في الكود.

🧪 أهم 8 ثوابت سحرية:
الثابتوظيفته
__LINE__رقم السطر في الكود
__FILE__المسار الكامل للملف الحالي
__DIR__مجلد الملف الحالي
__FUNCTION__اسم الدالة الحالية
__CLASS__اسم الكلاس الحالي
__METHOD__اسم الدالة مع الكلاس
__NAMESPACE__اسم النيمسبيس
__TRAIT__اسم الترايت المستخدم

🔍 مثال بسيط:

echo "السطر الحالي: " . __LINE__ . "<br>";
echo "المسار الكامل: " . __FILE__ . "<br>";
PHP

🔸 النتيجة:

السطر الحالي: 1  
المسار الكامل: C:/xampp/htdocs/index.php
PHP

🎯 تُستخدم بشكل كبير في تتبع الأخطاء والـ debugging.

🚫 ثالثًا: Reserved Keywords (الكلمات المحجوزة)
✅ ما هي؟

كلمات مخصصة للغة PHP لا يمكن استخدامها لتسمية متغيرات أو دوال أو كلاسات.

🧨 أمثلة على الكلمات المحجوزة:
if, else, while, for, function, class, echo, switch, break, continue, public, private, new, try, catch, return, const, true, false, null
PHP
🔥 مثال خاطئ:
$if = "مرحبا"; // ❌ غير مسموح لأنها كلمة محجوزة
PHP
مثال صحيح:
$my_if = "مرحبا"; // ✅ مسموح
PHP
⚠️ نصائح:
  • تجنب استخدام أسماء مثل function, class, int, echo.
  • راقب IDE أو محرر الكود، لأنه يعطيك تحذير مباشرة.
🧠 ملخص سريع للمبتدئين:
النوعوصفمتغير؟يتغير؟
Predefined Constantsثوابت جاهزة من PHP
Magic Constantsثوابت تتغير حسب مكان الاستخدام
Reserved Keywordsكلمات خاصة بلغة PHP لا يجوز استخدامها كأسماء