) متغیرهای محلی :
با توجه به تعریف قلمرو متغیر ، تعریف یک متغیر در داخل یک تابع با بیرون یک تابع تفاوت دارد ، برای درک این مساله قطعه کد زیر را مشاهده نمائید :
۱
۲
۳
۴
۵
۶
۷
۸
۹
|
<?php
$x=20;
function milad(){
$x=10;
echo “inside of function is $x” . “<br>”;
}
milad();
echo “out of function is $x”;
?>
|
به نظر شما ، خروجی کد فوق چیست؟؟؟ در کد فوق ، در ابتدا یک متغیر x با مقدار ۲۰ تعریف شده است ، سپس در داخل تابع milad یک متغیر با همان نام (x) با مقدار ۱۰ تعریف شده است (این دو متغیر با یکدیگر تفاوت دارد!) ، بعد از فراخونی و چاپ متغیرها خروجی ها با یکدیگر تفاوت دارد ، متغیر x درون تابع یک متغیر محلی می باشد ، تغییر مقدار متغیر x محلی ، هیچ ارتباطی با متغیر x که دارای مقدار ۲۰ است ، ندارد .
۲)متغیرهای جهانی :
در مقابل متغیرهای محلی، متغیرهای جهانی وجود دارد ، که آنها را می توان در هرجایی از برنامه مورد استفاده قرار داد و آن آن را تغییر داد ، برای این که یک متغیر را به صورت جهانی تعریف نمائید ، از کلمه کلیدی global استفاده می کنیم .
به مثال زیر توجه نمائید :
۱
۲
۳
۴
۵
۶
۷
۸
۹
|
<?php
$x=20;
function add() {
global $x;
$x++;
echo “x is $x”;
}
add();
?>
|
مقدار خروجی ما برابر با ۲۱ می باشد ، چون متغیر x را در کلمه کلیدی global قرار داده ایم ، اما اگر کلمه global را حذف نمائید ، خروجی برابر با یک می شود .
یک روش دیگر برای متغیر جهانی وجود دارد و آن هم استفاه از آرایه سوپرگلوبال GLOBALS می باشد :
۱
۲
۳
۴
۵
۶
۷
۸
|
<?php
$x=20;
function add() {
$GLOBALS[‘x’]++;
}
add();
echo “x is” . $GLOBALS[‘x’];
?>
|
۳) متغیرهای استاتیک :
این نوع متغیرها ، که از نام آن ها مشص است ، همیشه دارای مقدار یکسانی هستند ، و اگر هم از تابع خارج شوند ، مقدار خود را از دست نمی دهند. برای این که یک متغیر را به صورت استاتیک تعریف کنید از کلمه کلیدی static استفاده می نمائیم:
۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
|
<?php
function foo() {
static $index = 0;
$index++;
echo “$index\n” . “<br>”;
}
foo();
foo();
foo();
?>
|
از خروجی کد فوق ، چه انتظاری دارید ، اگر متغیر ما به صورت static تعریف نشده بود ، خروجی ما برابر با مقدار پائین می شد :
۱
۱
۱
اما به دلیل اینکه متغیر را به صورت static تعریف نموده ایم ، خروجی می شود:
۱
۲
۳