متغیرهای static و محدوده متغیرها (Variable Scope)

1

متغیرهای static و محدوده متغیرها (Variable Scope)

در برنامه‌نویسی با زبان PHP، وقتی یک متغیر را تعریف می‌کنید، نمی‌توانید در هر کجای برنامه که خواستید از آن استفاده کنید. هر متغیر دارای یک “محدوده” یا Scope است که تعیین می‌کند آن متغیر در کدام بخش‌های کد قابل دسترسی و استفاده است. درک صحیح این مفهوم برای جلوگیری از خطاهای منطقی و باگ‌های ناخواسته بسیار ضروری است.

در این مقاله از سایت پی اچ پی ساز، در بخش متغیرها و توابع، به صورت جامع به بررسی محدوده متغیرها (Variable Scope) و همچنین کاربرد کلمه کلیدی static در PHP می‌پردازیم.

محدوده متغیرها (Variable Scope) در PHP

به طور کلی در زبان PHP، متغیرها می‌توانند در سه محدوده اصلی تعریف شوند:

  1. محدوده محلی (Local Scope)

  2. محدوده سراسری (Global Scope)

  3. محدوده سراسری فوق‌العاده (Superglobal)

۱. محدوده محلی (Local Scope)

متغیری که در داخل یک تابع (Function) تعریف می‌شود، دارای محدوده محلی است. این بدان معناست که این متغیر فقط و فقط در داخل همان تابع شناخته شده است و نمی‌توانید از بیرونِ تابع به آن دسترسی داشته باشید.

PHP

<?php
function myTest() {
    $x = 5; // محدوده محلی
    echo "<p>متغیر x در داخل تابع برابر است با: $x</p>";
}

myTest();

// استفاده از متغیر x در خارج از تابع باعث ایجاد خطا (Notice) می‌شود
echo "<p>متغیر x در خارج از تابع برابر است با: $x</p>";
?>

۲. محدوده سراسری (Global Scope)

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

PHP

<?php
$y = 10; // محدوده سراسری

function myTest2() {
    // استفاده از متغیر y در اینجا خطا ایجاد می‌کند
    echo "<p>متغیر y در داخل تابع: $y</p>"; 
}

myTest2();

echo "<p>متغیر y در خارج از تابع: $y</p>";
?>

چگونه در داخل تابع به متغیر سراسری دسترسی پیدا کنیم؟

برای استفاده از یک متغیر Global در داخل یک تابع، دو روش در PHP وجود دارد:

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

PHP

<?php
$a = 5;
$b = 10;

function addition() {
    global $a, $b;
    $b = $a + $b;
}

addition();
echo $b; // خروجی: 15
?>

روش دوم: استفاده از آرایه $GLOBALS زبان PHP تمام متغیرهای سراسری را در یک آرایه به نام $GLOBALS ذخیره می‌کند. کلید (Index) این آرایه، همان نام متغیر است.

PHP

<?php
$a = 5;
$b = 10;

function addition() {
    $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}

addition();
echo $b; // خروجی: 15
?>

متغیرهای استاتیک (Static Variables)

در حالت عادی، وقتی اجرای کدهای یک تابع به پایان می‌رسد، تمام متغیرهای محلی (Local) درون آن پاک می‌شوند و حافظه آن‌ها آزاد می‌گردد. بنابراین اگر تابع را دوباره فراخوانی کنید، متغیرها مجدداً از صفر ایجاد می‌شوند.

اما گاهی اوقات در برنامه‌نویسی نیاز داریم که یک متغیر محلی، مقدار خود را پس از پایان اجرای تابع حفظ کند تا در فراخوانی‌های بعدیِ همان تابع، بتوانیم از مقدار قبلی آن استفاده کنیم. اینجاست که کلمه کلیدی static به کمک ما می‌آید.

برای این کار کافیست در زمان تعریف متغیر، کلمه static را قبل از آن بنویسید:

PHP

<?php
function myCounter() {
    static $count = 0;
    echo $count . "<br>";
    $count++;
}

myCounter(); // خروجی: 0
myCounter(); // خروجی: 1
myCounter(); // خروجی: 2
?>

نکات مهم درباره متغیرهای Static:

  1. متغیر استاتیک همچنان یک متغیر محلی (Local) است و نمی‌توانید خارج از آن تابع به آن دسترسی داشته باشید.

  2. مقداردهی اولیه به متغیر استاتیک (مانند static $count = 0;) فقط در اولین فراخوانی تابع انجام می‌شود و در فراخوانی‌های بعدی نادیده گرفته می‌شود.

نتیجه‌گیری

شناخت تفاوت بین متغیرهای Local و Global به شما کمک می‌کند تا امنیت و ساختار کدهای خود را بهبود ببخشید و از تداخل نام متغیرها در بخش‌های مختلف برنامه جلوگیری کنید. همچنین استفاده هوشمندانه از متغیرهای static می‌تواند در نوشتن توابع شمارنده، کش کردن (Caching) داده‌های موقت درون تابع و مدیریت بهتر حافظه بسیار کاربردی باشد.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *