الجمعة، 20 ديسمبر 2013

أساسيات برمجة المواقع بي اتش بي - تعريف الثوابت PHP Constants

 تعريف الثوابت PHP Constants

PHP Constants



الثابتPHP Constants هو اسم لمعرف يحمل  قيمة اي نوع بيانات. لا يمكن تغير قيمته أو عدم تعريفه عندما يتم تنفيذ السكريبت . المتعارف عليه بان اسم الثابت PHP Constants يكتب بالاحرف الكبيرة ويجب ان يبدا الاسم بحرف او علامة الشرطة التحتية _ ثم اي من الحروف والارقام لا يحتاج لتعريفه علامة الدولار مثل المتغيرات  عند تعريفه يجب استخدام الكلمة المحجوزة define وعند
استخدامه فقط يتم استداعه باسمه  مباشرة بدون علامة الدولار $
او باستخدام الدالة constant()

الدالة الثابتة constant()

كما يشير اسمها فهي دالة تستخدم لارجاع القيمة الثابت PHP Constants للمعرف الثابتPHP Constants .

مثال:-
<html>
<head>
<title>الثوابث;/title>
</head>
<body>
<?php
define("MINSIZE", 50);
echo MINSIZE;
echo constant("MINSIZE"); // same thing as the previous line
?></body>
</html> 

الفروقات بين المتغيرات والثوابت PHP Constants.

1- ليس بحاجة لاستخدام علامة الدولار لتعريف الثوابت PHP Constants.
2- لايمكن تعريف الثوابت PHP Constants بالاسناد البسيط يجب استخدام الدالة define() لتعريف الثوابت PHP Constants.
3- يمكن الوصول الى الثواب  PHP Constants بدون قواعد او شروط.
4- بمجرد ان يعرف الثابت PHP Constants فلا يمكن تغيره او ازالة تعريفه.

الاسماء التي يمكن تعريف الثوابت PHP Constants والتي لا يمكن تعريف الثوابت PHP Constants بها


// أسماء يمكن تعريف الثوابت
define("ONE",     "first thing");
define("TWO2",    "second thing");
define("THREE_3", "third thing")
// أسماء غير صالحة لتعريف الثوابت
define("2TWO",    "second thing");
define("__THREE__", "third value"); 

الثوابت PHP Constants المعرفة ضمن لغة البي اتش بي:-
تضمن  لغة البي اتش بي الكثير من الثوابت PHP Constants  المعرفة ضمنها نورد بعضها في الجدول التالي.

NameDescription
__LINE__يرجع رقم السطر الحالي في الملف
echo __LINE__;
__FILE__يرجع مسار الملف واسم الملف الحالي
__FUNCTION__تعيد اسم الوظيفة كما هي معرفة
__CLASS__تعيد اسم الفئة
__METHOD__تعيد اسم دالة الفئة



الثابت هو متغير بقيمة لا يمكن تغييرها بواسطة البرنامج النصي.  لذلك ، يجب تعيين هذه القيمة في نفس الوقت الذي يتم فيه إنشاء الثابت.  لا يجوز إعادة تعريف الثوابت أو عدم تحديدها بمجرد تعيينها.  توفر PHP طريقتين لإنشاء الثوابت: معدل ثابت ووظيفة تعريف ().  قبل الإصدار 5.3 من PHP ، كانت الثوابت تربط اسمًا بقيمة عددية بسيطة.  على سبيل المثال ، القيم المنطقية true و false هي ثوابت مرتبطة بالقيمتين 1 و لا شيء على التوالي.
من الشائع أيضًا إعلان الثوابت في نص برمجي.
 ضع في اعتبارك هذا المثال التصريح الثابت:
define("pi", 3.14159);
//  المخرجات 3.14159
echo pi;
في الكود التالي 
الباراميتر الثالث من تحديد اختيارية وتشير إلى ما إذا كان الاسم الثابت حساسًا لحالة الأحرف أم لا.  السلوك الافتراضي حساس لحالة الأحرف ، إذا تم تعيينه على TRUE ، فسيتم تعريف الثابت بأنه غير حساس لحالة الأحرف:

define("pi", 3.14159, true);
// المخرجات 3.14159
echo PI;
ملاحظة: تم إهمال تعريف الثوابت غير الحساسة لحالة الأحرف اعتبارًا من PHP 7.3.0.

 الثوابت لا يسبقها حرف $؛  لا يمكن تغييرها بمجرد تحديدها ؛  يمكن الوصول إليها في أي مكان في البرنامج النصي ، بغض النظر عن مكان الإعلان عنها ؛  ويمكن أن تكون قيمًا بسيطة فقط.
الثوابت مفيدة لأنها تسمح بتجميع المعلمات الداخلية للبرنامج النصي.  عندما تتغير معلمة واحدة ، على سبيل المثال ، إذا حددت حدًا أقصى جديدًا لعدد الأسطر لكل صفحة ويب ، يمكنك تغيير هذه المعلمة الثابتة في مكان واحد فقط وليس في جميع أنحاء الكود.

 فيما يلي نبذة مختصرة عن تاريخ إصدار CONSTANTS في PHP:

 اعتبارًا من PHP 5.3 ، يمكنك استخدام الكلمة الأساسية const لتعريف الثوابت العامة (في السابق ، تم استخدام كلمة const الأساسية لإنشاء ثوابت الفئة).
 اعتبارًا من PHP 5.6 ، من الممكن تحديد ثابت المصفوفة باستخدام كلمة const.
 اعتبارًا من PHP 7 ، يمكن أيضًا تعريف ثوابت المصفوفة باستخدام دالة تعريف ().
 مقدار ثابت
 يتم استخدام الكلمة الأساسية const لإنشاء ثوابت الفئة.  على عكس الخصائص العادية (المتغيرات) ، لا تحتوي ثوابت الفئة على مستوى وصول محدد لأنها تكون دائمًا مرئية للعامة:
class Circle {
 const PI = 3.14159;
}
يجب تعيين قيمة للثوابت عند إنشائها.  لا يمكن تهيئة الثابت إلا بقيمة ثابتة ، وليس بتعبير.  تتم الإشارة إلى ثوابت الفئة بنفس طريقة الرجوع إلى الخصائص الثابتة:
// 3.14159
echo Circle::PI
اعتبارًا من PHP 5.3 ، يمكن استخدام const لإنشاء ثوابت عامة.  يتم تعريف هذا الثابت في النطاق العام ويمكن الوصول إليه في أي مكان في البرنامج النصي:

const PI = 3.14159;

//3.14159
echo PI;

دالة التعريف define ()

 يمكن لوظيفة التعريف define إنشاء ثوابت عامة ومحلية ، ولكن ليس ثوابت الفئة.  الوسيطة الأولى لهذه الدالة هي اسم الثابت والثانية هي قيمتها:

define(PI, 3.14159);
تمامًا مثل الثوابت التي تم إنشاؤها باستخدام ثابت ، يتم استخدام ثوابت التعريف بدون علامة الدولار ولا يمكن تعديل قيمتها.

 الدالة المحددة define ()

 للتحقق مما إذا كان الثابت موجودًا بالفعل ، يمكن استخدام الوظيفة المعرفة define ().  تعمل هذه الوظيفة مع الثوابت التي تم إنشاؤها باستخدام ثابت const أو تعريف define():

if (!defined(PI)) {
 echo 'PI not defined';
}
أتاحت PHP 7 إمكانية إنشاء مصفوفات ثابتة Constant arrays باستخدام دالة ااتعريف define ().  دعم المصفوفات الثابتة Constant arrays التي تم إنشاؤها باستخدام const موجودة منذ PHP 5.6.

المصفوفات الثابتة Constant arrays

 قبل PHP 7 ، كانت الثوابت المعرّفة بواسطة تعريف () تحتوي على تعبيرات عددية فقط ، لكن ليس مصفوفات.  بدءًا من PHP 5.6 ، من الممكن تحديد ثابت مصفوفة باستخدام كلمة const أساسية ، واعتبارًا من PHP 7 ، يمكن أيضًا تعريف ثوابت المصفوفة باستخدام تعريف ():

// the define() مثال
define(ARR, [
 'string' => 'some text',
 'number' => 123
]);
echo ARR['string']; // some text
echo ARR['number']; // 123

// the class const مثال
class Temp {
 const ARR = [
  'string' => 'some text',
  'number' => 123
 ];
}
echo Temp::ARR['string']; // some text
echo Temp::ARR['number']; // 123

// the global const مثال 
const ARR = [
 'string' => 'some text',
 'number' => 123
];
echo ARR['string']; // some text
echo ARR['number']; // 123

Define () مقابل const
 بدءًا من الإصدار 5.3 من PHP ، توجد طريقتان لتعريف الثوابت: إما باستخدام الكلمة الأساسية const أو باستخدام دالة التعريف define():

const PI = 3.14159;

//OR
define(PI, 3.14159);
الفرق الأساسي بين هاتين الطريقتين هو أن الثابت يحدد الثوابت في وقت الترجمة ، بينما define () يحدد الثوابت في وقت التشغيل.

 لا يمكن استخدام const لتعريف الثوابت بشكل مشروط.  لتعريف ثابت عام ، يجب استخدامه في النطاق الخارجي ، على سبيل المثال:

if (...) {
 const PI = 3.14159; //خطأ 
 
 define(PI, 3.14159); //صحيح
}

يحدد const ثابتًا في مساحة الاسم الحالية ، بينما يجب تمرير تعريف define() باسم مساحة الاسم الكامل:
namespace A\NAME\SPACE;
// To define the constant A\NAME\SPACE\PI:
const PI = 3.14159;
define('A\NAME\SPACE\PI', 3.14159);

يمكن استخدام const ضمن فئة أو واجهة لتعريف ثابت فئة أو ثابت واجهة.  تعريفdefine () لا يمكن استخدامه لهذا الغرض:


// valid
class Circle {
 const PI = 3.14159;
}

// invalid
class Wheel {
 define(PI, 3.14159);
}

الثوابت المحددة مسبقًا - الثوابت السحرية Predefined Constants - the magic constants

 تأتي PHP جاهزة مع العشرات من الثوابت المحددة مسبقًا والتي من غير المحتمل عمومًا أن تستخدمها كمبتدئ في PHP.  دائمًا ما تحتوي أسماء الثوابت السحرية على شرطتين سفليتين في البداية واثنتين في النهاية ، بحيث لا تحاول عن طريق الخطأ تسمية أحد ثوابتك باسم مأخوذ بالفعل.  تم تفصيلها في القائمة التالية:

__LINE__
 رقم السطر الحالي للملف.

 __FILE__
 المسار الكامل واسم الملف.  إذا تم استخدامه داخل التضمين ، يتم إرجاع اسم الملف المضمن.

 __DIR__
 دليل الملف.  إذا تم استخدامه داخل تضمين ، فسيتم إرجاع دليل الملف المضمن.  لا يحتوي اسم الدليل الذي تم إرجاعه على شرطة مائلة ما لم يكن الدليل الجذر.

 __FUNCTION__
 اسم الوظيفة.  إرجاع اسم الوظيفة كما تم التصريح عنه.

__CLASS__
 اسم الفصل.  إرجاع اسم الفئة كما تم التصريح عنه.

 __METHOD__
 اسم طريقة الفئة.  يتم إرجاع اسم الطريقة كما تم التصريح عنه.

 __NAMESPACE__
 اسم مساحة الاسم الحالية.  يتم تعريف هذا الثابت في وقت الترجمة.

 __TRAIT__
 اسم السمة.  يتضمن اسم السمة مساحة الاسم التي تم الإعلان عنها (على سبيل المثال Foo \ Bar).

ClassName::class
 يمكنك الحصول على سلسلة تحتوي على الاسم المؤهل بالكامل لفئة ClassName.  هذا مفيد بشكل خاص مع الفئات ذات مساحة الاسم.

 أحد الاستخدامات المفيدة لهذه المتغيرات هو لأغراض التصحيح ، عندما تحتاج إلى إدخال سطر من التعليمات البرمجية لمعرفة ما إذا كان تدفق البرنامج يصل إليه:

echo "This is line " 
 . __LINE__ . " of file " . __FILE__;

يؤدي هذا إلى إخراج سطر البرنامج الحالي في الملف الحالي (بما في ذلك المسار) الذي يتم تنفيذه إلى متصفح الويب.




Ahmed Ata Almahallawi
Freelancer
IT
IT Help Desk,
SEO experience,PHP,C#,ASPX
Al alami st
gaza -jabaliaGaza Strip
Palestine
ahmed.almahallawi@gmail.com
@aalmahallawi 

التسميات: