مرجع شامل لأهم الثوابت في PHP (جاهز لـ PHP 8.4)
في PHP هناك نوعان من الثوابت:
- ثوابت تقوم أنت بتعريفها باستخدام
define()أوconst - ثوابت مدمجة داخل اللغة (Built-in Constants)
هذه المقالة تركز على الثوابت المدمجة التي تأتي مع PHP نفسها، ولا تحتاج إلى استيراد أو إعداد مسبق. جميعها متوافقة مع PHP 8.3 وآمنة للاستخدام في PHP 8.4.
أولًا: ثوابت المسارات والملفات (Filesystem & Path)
هذه الثوابت مفيدة عند التعامل مع الملفات والمجلدات بطريقة مرنة عبر أنظمة تشغيل مختلفة.
echo DIRECTORY_SEPARATOR; // / في لينكس و macOS ، \ في ويندوز
echo PATH_SEPARATOR; // : في لينكس ، ; في ويندوز
echo __FILE__; // المسار الكامل للملف الحالي
echo __DIR__; // المجلد الحالي
echo __LINE__; // رقم السطر الحالي في الملف
مثال عملي:
$logFile = __DIR__ . DIRECTORY_SEPARATOR . 'logs' . DIRECTORY_SEPARATOR . 'app.log';
بهذه الطريقة يصبح الكود قابلًا للنقل بين الأنظمة بدون تعديل يدوي.
ثانيًا: الثوابت السحرية (Magic Constants)
تُسمى “سحرية” لأنها تعتمد على السياق الذي تُستخدم فيه.
function testFunction() {
echo __FUNCTION__;
}
class Example {
public function run() {
echo __METHOD__;
}
}
أهمها:
__FUNCTION__اسم الدالة الحالية__CLASS__اسم الكلاس__TRAIT__اسم الـ Trait__METHOD__اسم الميثود مع الكلاس__NAMESPACE__اسم الـ Namespace الحالي
تُستخدم كثيرًا في أنظمة التسجيل (Logging) أو في أدوات Debug.
ثالثًا: ثوابت بيئة PHP والنظام
هذه الثوابت تعطيك معلومات مباشرة عن نسخة PHP والنظام.
echo PHP_VERSION; // مثال: 8.4.0-dev
echo PHP_MAJOR_VERSION; // 8
echo PHP_MINOR_VERSION; // 4
echo PHP_RELEASE_VERSION; // 0
echo PHP_OS; // Linux أو WINNT أو Darwin
echo PHP_OS_FAMILY; // Linux أو Windows أو BSD أو macOS
echo PHP_SAPI; // cli أو apache2handler
echo PHP_EOL; // نهاية السطر المناسبة للنظام
قيم رقمية مهمة:
echo PHP_INT_MAX;
echo PHP_INT_MIN;
echo PHP_FLOAT_MAX;
echo PHP_FLOAT_MIN;
مفيدة عند كتابة أنظمة تعتمد على حدود رقمية دقيقة أو معالجة بيانات كبيرة.
رابعًا: ثوابت الأخطاء (Error Reporting)
تُستخدم مع error_reporting() أو عند إنشاء أخطاء مخصصة.
error_reporting(E_ALL);
أهم المستويات:
- E_ERROR
- E_WARNING
- E_PARSE
- E_NOTICE
- E_DEPRECATED
- E_USER_ERROR
- E_USER_WARNING
- E_USER_NOTICE
- E_ALL
مثال على إطلاق خطأ مخصص:
trigger_error("Something went wrong", E_USER_WARNING);
فهم هذه الثوابت مهم خصوصًا في بيئات الإنتاج حيث يجب التحكم بدقة في مستوى الإبلاغ عن الأخطاء.
خامسًا: ثوابت أخطاء رفع الملفات
عند رفع ملف عبر $_FILES ستجد كود خطأ مرتبط بالعملية.
if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
echo "Upload successful";
}
أهم القيم:
- UPLOAD_ERR_OK
- UPLOAD_ERR_INI_SIZE
- UPLOAD_ERR_FORM_SIZE
- UPLOAD_ERR_PARTIAL
- UPLOAD_ERR_NO_FILE
- UPLOAD_ERR_NO_TMP_DIR
- UPLOAD_ERR_CANT_WRITE
- UPLOAD_ERR_EXTENSION
هذه الثوابت ضرورية عند بناء نظام رفع ملفات احترافي.
سادسًا: ثوابت Streams في CLI
متوفرة فقط عند تشغيل PHP من سطر الأوامر.
fwrite(STDOUT, "Hello\n");
fwrite(STDERR, "Error message\n");
$input = fgets(STDIN);
تُستخدم في بناء أدوات CLI مخصصة أو سكربتات أتمتة.
ملاحظات مهمة
- هذه الثوابت مدمجة داخل PHP ولا تحتاج استيراد.
- جميعها متوافقة مع PHP 8.3.
- آمنة للاستخدام في PHP 8.4.
فهم هذه الثوابت ليس مجرد معرفة نظرية، بل يساعدك في كتابة كود أكثر وعيًا بالبيئة والسياق، وأقل اعتمادًا على القيم الثابتة اليدوية.