متغیرهای محلی و سراسری در php

315

0

متغیر های گلوبال و محلی

در گذشته درباره ی ارسال پارامتر به توابع و نحوه تعریف تابع در PHP صحبت کردیم اکنون میخواهیم یاد بگیریم چطور باید متغیر های محلی و سراسری را در این زبان تعریف کنیم . هنگامیکه در یک تابع متغیری را تعریف میکنیم ، آن متغیر محلی نامیده میشود. متغیرهای محلی تنها داخل همان تابعی که تعریف شده اند قابل دسترسی هستند.

اما متغیرهای گلوبال یا سراسری در همه جای برنامه (بجز در توابع) در دسترس هستند و میتوان مقادیر آنها را همه جای برنامه تغییر داد و از آنها استفاده نمود.

به مثال زیر توجه فرمائید :

<?php
$x=10;
function scope() {
$y=5;
}
echo $y;
?>

در صورت اجرای کد بالا با خطا روبرو خواهیم شد، زیرا متغیر y  بصورت محلی تعریف شده و در خارج تابع نمیتوان به آن دسترسی داشت.

حال اگر بجای متغیر y  از متغیر x  در خط 6 برنامه استفاده کنیم خروجی برابر 10 خواهد بود.

استفاده از کلمه کلیدی global

با استفاده از کلمه کلیدی global، می توان به متغیرهای سراسری در داخل یک تابع دسترسی داشته باشید.

به مثال زیر دقت کنید :

<?php
$x=10;
function scope() 
{
global $x;
$x=5;
}
scope();
echo $x;

خروجی برابر 5 خواهد بود.

در این مثال ابتدا مقدار متغییر x برابر 10 میباشد. با گلوبال کردن متغیر x میتوانیم از آن در تابع scope() استفاده بکنیم. در تابع scope() مقدار متغییرx به 5 تغییر می‌یابد و به کاربر نمایش داده میشود.

در صورت عدم استفاده از کلمه کلیدی global پیش از متغییر x در تابع scope() مقداری که به کاربر نمایش داده خواهد شد برابر 10 است.

کلمه کلیدی static

بطور معمول زمانی که اجرای یک تابع به پایان می رسد، تمام متغیرهای آن نیز حذف خواهند شد. اما بعضی مواقع نیاز می شود که یک متغیر محلی برای استفاده های بعدی حذف نشود.

حال اگر درون تابع، متغیری از نوع static تعریف کنیم، تنها داخل همان تابع به متغیر تعریف شده دسترسی خواهیم داشت و آخرین مقداری که متغیر در خود ذخیره کرده است را می‌توانیم مشاهده نمائیم

یک مثال واقعی برای متغیر static، استفاده از آن برای نمایش آمار تعداد فضاهای خالی در یک پارگینک خودرو است.
خودرو شماره 1 وارد پارکینگ شده و باعث اضافه شدن یک واحد به متغیر staticتعداد خودروها می‌شود، حال اگر خودرو شماره 2 وارد پارکینگ شود، به آخرین مقدار متغیر staticتعداد خودروها یک واحد اضافه می‌شود.

<?php
function zarfiat() {
    static $car_number = 0;
    echo $car_number;
    $car_number++;
}

zarfiat();
echo "<br>";
zarfiat();
echo "<br>";
zarfiat();
?>

خروجی بصورت زیر است :

0
1
2

تابع zarfiat با هر بار اجرا یک مقدار به متغیر car_number اضافه می‌کند ولی شاید برایتان سوال پیش بیاید که اگر کلمه کلیدی static پشت متغیر car_number نباشد چه اتفاقی خواهد افتاد؟ تابع zarfiat هر بار اجرا می‌شود و مقدار متغیر car_number را از صفر به یک تغییر می‌دهد ولی دوباره بعد از اتمام تابع، متغیر car_number صفر می‌شود ولی اگر کلمه کلیدی static را قبل از متغیر car_number  قرار دهیم آخرین مقدار متغیر ذخیره شده و با هر بار اجرا شدن تابع مقدار آن افزایش می‌یابد. مثلا در مثال بالا ۳ بار تابع zarfiat  فراخوانی شده و مقدارش از صفر به یک و در نهایت به دو تغییر می‌یابد. هر زمان که تابع صدا زده می شود، آخرین مقدار متغیر static، حفظ می شود.

مهندس محسن صادق نژاد

دبیر | مهندس نرم افزار دانشگاه شهید رجایی

1سال در کنار تاتژن

اشتراک
اطلاع از
guest
0 Comments
Inline Feedbacks
View all comments
ارسال تیکت
0
Would love your thoughts, please comment.x
()
x