الثوابت في PHP

من موسوعة حسوب
< PHP
مراجعة 15:43، 28 يناير 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات) (استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}')
اذهب إلى التنقل اذهب إلى البحث

الثابت هو معرّف (اسم) لقيمة بسيطة، وكما هو واضح من الاسم فإنّ هذه القيمة غير قابلة للتبديل أثناء تنفيذ الشيفرة (باستثناء الثوابت السحرية والتي لا تعدّ ثوابت في الواقع). الثابت حساس لحالة الأحرف ومن الشائع استخدام الأحرف الكبيرة في تسمية الثوابت. تتبع الثوابت نفس القواعد المتّبعة للتسمية في PHP، فاسم الثابت الصحيح يبدأ بحرف أو بشرطة سفلية، متبوعًا بعدد غير محدّد من الأحرف والأرقام والشرطات السفلية. ولو أردنا استخدام التعابير النمطية (Regular Expressions) للتعبير عن اسم المتغير فسيكون كالتالي:

[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

نصيحة: راجع دليل Userland للتسمية.

المثال 1: أسماء ثوابت صحيحة وغير صحيحة

<?php
// أسماء ثوابت صحيحة
define("FOO",     "something");
define("FOO2",    "something else");
define("FOO_BAR", "something more");

// أسماء ثوابت صحيحة
define("2FOO",    "something");

// هذه الطريقة صحيحة ولكن تجنّب استخدامها	
// إذ قد تقدّم اللغة يومًا ما ثابتًا سحريًا
// قد يؤدي إلى تعطيل شيفرتك.	
define("__FOO__", "something"); 
?>

ملاحظة: في هذا الدليل الحرف هو كل ما يقع ضمن النطاق a-z و A-Z والبايتات من 127 إلى 255 (0x7f-0xff).

كما هو الحال مع ذوات النطاق العام العالي (superglobals)، فإن الثوابت موجودة ضمن النطاق العام، ويمكن الوصول إليها من أي مكان في الشيفرة دون الحاجة إلى مراعاة النطاق الحالي. لمزيد من المعلومات حول النطاق راجع صفحة مجال المتغيرات في هذا الدليل.

الصيغة

يمكن تعريف الثابت باستخدام الدالة define()‎ أو باستخدام الكلمة المفتاحية const خارج الأصناف منذ الإصدار 5.3.0 من PHP. تتيح define()‎ إسناد الثوابت إلى مختلف أنواع القيم والتعبيرات، في حين أن هناك بعض القيود التي تحكم استخدام const. لا يمكن بأيّ حال من الأحوال تغيير قيمة الثابت أو إلغاء القيمة المسندة إليه بعد إجراء عملية الإسناد.

الثوابت السحرية

توفّر PHP عددًا كبيرًا من الثوابت المعرّفة مسبقًا للشيفرات التي تشغلها، ولكن ينشأ العديد من هذه الثوابت بواسطة ملحقات متعددة، وتكون الثوابت متاحة عند توفّر هذه الملحقات إما بواسطة التحميل الديناميكي (dynamic loading) أو بسبب كونها مبنية مع اللغة (compiled in).

مصادر