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

منتشر شده در 18 مارس 2020 آخرین به روز رسانی در 02 دسامبر 2020
مهندس محسن صادق نژاد
1670 0
متغیر سراسری در php

این پست با مسیر متخصص php مرتبط است. مشاهده مسیر (Roadmap)

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

متغیر محلی و سراسری در 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، حفظ می شود.

به پایان آموزش ” متغیر محلی و سراسری در php ” رسیدیم. چنانچه ابهام و اشکالی داشتید، می توانید در بخش نظرات مطرح نمایید.