دامنه متغیرها (Variable Scope)

محل دسترسی به متغیرها در PHP — متغیرهای محلی، سراسری و استاتیک را بشناسید

دامنه متغیر (Scope) چیست؟

دامنه متغیر (Scope) مشخص می‌کند که در کجای کد می‌توانید به یک متغیر دسترسی داشته باشید. نه همه متغیرها همه‌جا در دسترس هستند!

سه نوع دامنه در PHP

نوعتوضیحکجا تعریف می‌شود
محلی (Local)فقط داخل تابعداخل یک تابع
سراسری (Global)خارج از تمام توابعخارج از تابع
استاتیک (Static)محلی اما مقدار حفظ می‌شودداخل تابع با کلمه static

۱. متغیرهای محلی (Local)

متغیری که داخل یک تابع تعریف می‌شود، فقط داخل همان تابع قابل دسترسی است:

<?php
function myFunction() {
    $x = 5;  // متغیر محلی
    echo $x; // کار می‌کند: 5
}

myFunction();
echo $x;     // خطا! $x اینجا قابل دسترسی نیست
?>

۲. متغیرهای سراسری (Global)

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

<?php
$x = 10;  // متغیر سراسری

function myFunction() {
    echo $x;  // خطا! $x قابل دسترسی نیست
}

myFunction();
?>

دسترسی به متغیر سراسری با global

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

<?php
$x = 10;  // متغیر سراسری

function myFunction() {
    global $x;  // دسترسی به متغیر سراسری
    echo $x;    // کار می‌کند: 10
}

myFunction();
?>

استفاده از آرایه $GLOBALS

روش دیگر استفاده از آرایه $GLOBALS است:

<?php
$x = 10;

function myFunction() {
    echo $GLOBALS["x"];  // کار می‌کند: 10
}

myFunction();
?>

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

معمولاً وقتی تابع تمام می‌شود، متغیرهای محلی پاک می‌شوند. اما با static می‌توانید مقدار را حفظ کنید:

<?php
function counter() {
    static $count = 0;  // فقط یک‌بار مقدار اولیه می‌گیرد
    $count++;
    echo "فراخوانی شماره: $count<br>";
}

counter();  // شماره: 1
counter();  // شماره: 2
counter();  // شماره: 3
?>
متغیر static مقدار خود را بین فراخوانی‌های تابع حفظ می‌کند، اما فقط داخل همان تابع قابل دسترسی است.

مثال کاربردی

<?php
// متغیر سراسری
$taxRate = 0.09;

function calculatePrice($price) {
    global $taxRate;
    return $price + ($price * $taxRate);
}

echo calculatePrice(100);  // 109
echo calculatePrice(200);  // 218
?>
استفاده زیاد از global برنامه‌نویسی خوبی نیست. بهتر است مقادیر را به‌صورت پارامتر به تابع بدهید.

این مبحث بخشی از دوره آموزش کامل PHP است.

ابزارهای مرتبط