🔹 ما هي الثوابت؟
الثابت هو متغير لا تتغير قيمته أبدًا بعد تعريفه.
✳️ بعكس المتغير (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 4 | PHP 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 لا يجوز استخدامها كأسماء | ❌ | ❌ |