PHP – حوزه متغیر (Variables Scope)
حوزه متغیرهای PHP
در PHP، متغیرها میتوانند در هر کجای اسکریپت اعلان شوند.
حوزه (Scope) یک متغیر، بخشی از اسکریپت است که متغیر در آن قابل اشاره و استفاده است.
PHP سه نوع حوزه متغیر دارد:
- Local (محلی)
- Global (سراسری)
- Static (ثابت)
حوزه سراسری و محلی
متغیری که خارج از یک تابع اعلان میشود دارای حوزه سراسری است و فقط میتواند در خارج از تابع دسترسی داشته باشد:
مثال
متغیری با حوزه سراسری:
$x = 5; // global scope
function myTest() {
// استفاده از x داخل این تابع خطا ایجاد میکند
echo "<p>Variable x inside function is: $x</p>";
}
myTest();
echo "<p>Variable x outside function is: $x</p>";
متغیری که در داخل یک تابع اعلان میشود دارای حوزه محلی است و فقط میتواند در داخل آن تابع دسترسی داشته باشد:
مثال
متغیری با حوزه محلی:
function myTest() {
$x = 5; // local scope
echo "<p>Variable x inside function is: $x</p>";
}
myTest();
// استفاده از x خارج از تابع خطا ایجاد میکند
echo "<p>Variable x outside function is: $x</p>";
شما میتوانید متغیرهای محلی با نام مشابه در توابع مختلف داشته باشید، زیرا متغیرهای محلی تنها توسط تابعی که در آن اعلان شدهاند شناخته میشوند.
کلمه کلیدی global در PHP
کلمه کلیدی global
برای دسترسی به یک متغیر سراسری از داخل یک تابع استفاده میشود. برای این کار، از کلمه کلیدی global
قبل از متغیرها (داخل تابع) استفاده کنید:
مثال
$x = 5;
$y = 10;
function myTest() {
global $x, $y;
$y = $x + $y;
}
myTest();
echo $y; // خروجی 15
PHP همچنین تمام متغیرهای سراسری را در یک آرایه به نام $GLOBALS[index]
ذخیره میکند. اندیس نام متغیر را نگه میدارد. این آرایه نیز از داخل توابع قابل دسترسی است و میتواند برای بهروزرسانی مستقیم متغیرهای سراسری استفاده شود.
مثال بالا میتواند به این صورت بازنویسی شود:
مثال
$x = 5;
$y = 10;
function myTest() {
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
myTest();
echo $y; // خروجی 15
کلمه کلیدی static در PHP
به طور معمول، زمانی که یک تابع کامل/اجرا میشود، تمام متغیرهای آن حذف میشوند. با این حال، گاهی اوقات ما میخواهیم یک متغیر محلی حذف نشود. ما به آن برای کاری دیگر نیاز داریم.
برای این کار، از کلمه کلیدی static
زمانی که متغیر را برای اولین بار اعلان میکنید استفاده کنید:
مثال
function myTest() {
static $x = 0;
echo $x;
$x++;
}
myTest();
myTest();
myTest();
سپس، هر بار که تابع فراخوانی میشود، آن متغیر همچنان اطلاعاتی را که از آخرین باری که تابع فراخوانی شده بود، دارد.
نکته: متغیر همچنان محلی به تابع است.
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام