محدوده متغیرها در PHP
محدوده متغیرها در PHP
محدوده یا Scope مشخص میکند یک متغیر در کدام قسمت از برنامه قابل دسترسی و استفاده است. یک متغیر ممکن است در کل فایل PHP قابل استفاده باشد یا فقط در داخل یک تابع در دسترس باشد.
انواع محدوده متغیرها در PHP
بهطور کلی در PHP با سه نوع مهم از محدوده متغیرها روبهرو هستیم:
- متغیرهای محلی
- متغیرهای سراسری
- متغیرهای استاتیک
| نوع متغیر | محدوده دسترسی | ویژگی |
|---|---|---|
| محلی | داخل تابع | فقط در همان تابع قابل استفاده است |
| سراسری | خارج از توابع | برای استفاده داخل تابع باید به آن دسترسی داده شود |
| استاتیک | داخل تابع | مقدار خود را بین فراخوانیهای تابع حفظ میکند |
متغیر محلی
اگر یک متغیر داخل یک تابع ایجاد شود، آن متغیر معمولاً فقط در همان تابع قابل دسترسی است. به چنین متغیری متغیر محلی گفته میشود.
<?php
function myFunction() {
$name = "Ali";
echo $name;
}
myFunction();
?>
خروجی
Ali
متغیر $name داخل تابع ایجاد شده است؛ بنابراین خارج از آن تابع در دسترس نیست.
دسترسی نداشتن به متغیر محلی خارج از تابع
اگر متغیری داخل تابع تعریف شود، نمیتوانیم مستقیماً خارج از تابع از آن استفاده کنیم.
<?php
function myFunction() {
$name = "Ali";
}
myFunction();
echo $name;
?>
متغیر سراسری
اگر متغیری خارج از تابع تعریف شود، به آن متغیر سراسری یا Global گفته میشود. این متغیر در محدوده اصلی برنامه قرار دارد.
<?php
$name = "Ali";
function myFunction() {
echo $name;
}
myFunction();
?>
در این مثال ممکن است انتظار داشته باشیم مقدار $name داخل تابع نیز در دسترس باشد؛ اما متغیرهای سراسری بهصورت خودکار داخل توابع قابل دسترسی نیستند.
استفاده از کلمه کلیدی global
برای دسترسی به یک متغیر سراسری از داخل یک تابع میتوان از کلمه کلیدی global استفاده کرد.
<?php
$name = "Ali";
function myFunction() {
global $name;
echo $name;
}
myFunction();
?>
خروجی
Ali
با نوشتن global $name; داخل تابع، PHP میفهمد که منظور همان متغیر سراسری $name است.
استفاده از چند متغیر سراسری
میتوان چند متغیر سراسری را نیز در یک تابع در دسترس قرار داد.
<?php
$firstName = "Ali";
$lastName = "Ahmadi";
function showName() {
global $firstName, $lastName;
```
echo $firstName . " " . $lastName;
```
}
showName();
?>
خروجی
Ali Ahmadi
تغییر مقدار متغیر سراسری داخل تابع
با استفاده از global میتوان مقدار متغیر سراسری را نیز از داخل تابع تغییر داد.
<?php
$count = 10;
function increaseCount() {
global $count;
$count = 20;
}
increaseCount();
echo $count;
?>
خروجی
20
متغیرهای استاتیک
متغیر استاتیک متغیری است که داخل یک تابع تعریف میشود، اما برخلاف یک متغیر محلی معمولی، مقدار خود را پس از پایان اجرای تابع حفظ میکند.
برای تعریف چنین متغیری از کلمه کلیدی static استفاده میشود.
<?php
function counter() {
static $count = 0;
```
$count++;
echo $count . "<br>";
```
}
counter();
counter();
counter();
?>
خروجی
1
2
3
در این مثال، متغیر $count پس از پایان هر بار اجرای تابع مقدار خود را حفظ میکند. بنابراین در فراخوانی دوم مقدار آن از 1 به 2 و در فراخوانی سوم به 3 میرسد.
مقایسه متغیر معمولی و استاتیک
<?php
function normalCounter() {
$count = 0;
$count++;
```
echo $count . "<br>";
```
}
function staticCounter() {
static $count = 0;
$count++;
```
echo $count . "<br>";
```
}
normalCounter();
normalCounter();
echo "
";
staticCounter();
staticCounter();
?>
خروجی
1
1
1
2
در تابع اول، متغیر در هر بار اجرای تابع دوباره مقداردهی میشود؛ اما در تابع دوم، متغیر استاتیک مقدار قبلی خود را حفظ میکند.
یک مثال کاربردی
فرض کنید میخواهیم تعداد دفعات اجرای یک عملیات را در یک تابع بشماریم. متغیر استاتیک برای چنین کاری بسیار مناسب است.
<?php
function visitCounter() {
static $visits = 0;
```
$visits++;
echo "This function has been called " . $visits . " times.<br>";
```
}
visitCounter();
visitCounter();
visitCounter();
?>
خروجی
This function has been called 1 times.
This function has been called 2 times.
This function has been called 3 times.
نکات مهم این درس
- محدوده متغیر مشخص میکند متغیر در کدام قسمت برنامه قابل دسترسی است.
- متغیری که داخل تابع ایجاد شود، معمولاً محلی است.
- متغیرهای تعریفشده خارج از تابع، سراسری هستند.
- متغیر سراسری بهصورت خودکار داخل تابع قابل استفاده نیست.
- با کلمه کلیدی global میتوان متغیر سراسری را داخل تابع در دسترس قرار داد.
- متغیرهای static داخل تابع قرار دارند اما مقدار خود را بین فراخوانیهای تابع حفظ میکنند.
- انتخاب محدوده مناسب متغیر باعث خوانایی و مدیریت بهتر برنامه میشود.
تمرین
- یک متغیر static برای شمارنده ایجاد کنید.
- در هر بار اجرای تابع، مقدار شمارنده را یک واحد افزایش دهید.
- تابع را پنج بار اجرا کنید.
- در هر بار اجرا، شماره اجرای فعلی را نمایش دهید.
جمعبندی
محدوده متغیرها یکی از مفاهیم مهم PHP است. متغیرهای محلی فقط در محدوده تابع خود قابل استفاده هستند، متغیرهای سراسری خارج از توابع تعریف میشوند و برای دسترسی به آنها از داخل تابع میتوان از global استفاده کرد. همچنین متغیرهای استاتیک با وجود محلی بودن، مقدار خود را بین فراخوانیهای مختلف تابع حفظ میکنند.
