نطاق متغيرات PHP
نطاق متغيرات PHP
في PHP ، يمكن التصريح عن المتغيرات في أي مكان في البرنامج النصي.
نطاق المتغير هو جزء من البرنامج النصي حيث يمكن استخدام / الرجوع إلى المتغير.
PHP لها ثلاثة نطاقات متغيرة مختلفة:
- محلي
- عالمي
- ثابتة
النطاق العالمي والمحلي
المتغير المعلن خارج دالة له نطاق عالمي ولا يمكن الوصول إليه إلا من خارج الدالة:
مثال
متغير مع النطاق العالمي:
<?php
$x = 5; // global scope
function myTest() {
// using x inside this function will generate an error
echo "<p>Variable x inside function is: $x</p>";
}
myTest();
echo "<p>Variable x outside function is: $x</p>";
?>
المتغير المعلن داخل دالة له نطاق محلي ولا يمكن الوصول إليه إلا من خلال هذه الوظيفة:
مثال
متغير مع النطاق المحلي:
<?php
function myTest() {
$x = 5; // local scope
echo "<p>Variable x inside function is: $x</p>";
}
myTest();
// using x outside the function will generate an error
echo "<p>Variable x outside function is: $x</p>";
?>
يمكن أن يكون لديك متغيرات محلية بنفس الاسم في وظائف مختلفة ، لأن المتغيرات المحلية يتم التعرف عليها فقط من خلال الوظيفة التي تم التصريح عنها.
PHP الكلمة الرئيسية العالمية
يتم global
استخدام الكلمة الأساسية للوصول إلى متغير عام من داخل دالة.
للقيام بذلك ، استخدم global
الكلمة الأساسية قبل المتغيرات (داخل الوظيفة):
مثال
<?php
$x = 5;
$y = 10;
function myTest()
{
global $x, $y;
$y = $x + $y;
}
myTest();
echo $y; // outputs 15
?>
تقوم PHP أيضًا بتخزين جميع المتغيرات العامة في مصفوفة تسمى
. يحمل اسم المتغير. يمكن الوصول إلى هذه المصفوفة أيضًا من داخل الوظائف ويمكن استخدامها لتحديث المتغيرات العامة مباشرةً.$GLOBALS[index]
index
يمكن إعادة كتابة المثال أعلاه على النحو التالي:
مثال
<?php
$x = 5;
$y = 10;
function myTest()
{
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
myTest();
echo $y; // outputs 15
?>
PHP الكلمة الرئيسية الثابتة
عادة ، عند اكتمال / تنفيذ وظيفة ، يتم حذف جميع متغيراتها. ومع ذلك ، في بعض الأحيان نريد عدم حذف متغير محلي. نحن في حاجة إليها لوظيفة أخرى.
للقيام بذلك ، استخدم static
الكلمة الأساسية عندما تعلن عن المتغير لأول مرة:
مثال
<?php
function myTest()
{
static $x = 0;
echo $x;
$x++;
}
myTest();
myTest();
myTest();
?>
بعد ذلك ، في كل مرة يتم استدعاء الوظيفة ، سيظل لدى هذا المتغير المعلومات التي يحتويها منذ آخر مرة تم استدعاء الوظيفة.
ملاحظة: المتغير لا يزال محليًا بالنسبة للدالة.