متغیرها برای ذخیره کردن اطلاعاتی مانند رشته، متن، عدد و ... استفاده میشوند. به مثال ریاضی زیر توجه کنید:
a = 1
b = 2
c = a + b
در مثال بالا، سه متغیر تعریف شده که هرکدام مقداری را در خود نگه میدارد.
متغیر a مقدار 1 و متغیر b مقدار 2 را در خود جای داده است. در خط سوم متغیر c برابر حاصل جمعِ دو متغیر a و b میباشد.
از آنجاییکه a = 1
و b = 2
است در نتیجه c = 3
میشود.
کل ماجرای متغیرها، در این مثال ریاضی، خلاصه شده است. حالا در زبانهای برنامه نویسی هم، از متغیرها استفاده میشود ولی هر زبان ساختار خودش را دارد.
متغیرها در زبان PHP:
1. با علامت $
شروع میشوند و در ادامه نام متغیر میآید. مانند: $name
2. اسم متغیرها، فقط شامل موارد زیر میباشد:
* کاراکترهای بزرگ و کوچک الفبای لاتین [A-Z]
و [a-z]
مجاز میباشند.
* ارقام [0-9]
مجاز میباشند.
* کاراکترهای Extended ASCII مجاز میباشد.(بازه ی مجاز این کاراکترها [\x7f-\xff]
میباشد.)
+ همچنین اکثر کاراکترهای Unicode (کاراکترهای Multi Byte، مانند: $محسن
) را میتوان در نام متغیرها استفاده کرد. (علت: در جلسات آینده)
* آندرلاین _
مجاز میباشد.
3. یک متغیر، باید با یک حرف مجاز یا آندرلاین _
شروع شود. مانند: $€
(جزو کاراکترهای Extended ASCII میباشد.) ، _biDak
، ___a1
و ...
4. یک متغیر، نباید با عدد شروع شود. غلط: $1a
5. یک متغیر، نباید whitespace داشته باشد. غلط: $first name
6. متغیرها، به حروف کوچک و بزرگ حساس هستند.(اصلاحاً case-sensitive هستند.) مثلاً متغیرهای $mohsen
و $MOHSEN
و $MoHsen
با هم فرق میکنند.
نکته: از $this
نمیتوانید برای تعریف متغیر استفاده کنید. چون این متغیر رزرو شده است.
با توجه به توضیحات بالا، متغیرهای زیر مجاز میباشند:
$mohsen
$mohsenMovahed
$MOHSEN_MOVAHED
$_7_l_e_a_r_n
$academy7learn
$သောက်စရာ
$напиток
$محسن
$محسن_موحد
$•_°
به مثال زیر توجه کنید:
<?php
$•_° = 123;
echo $•_°; // shows 123
متغیرهای زیر غیر مجاز هستند:
$7learn // Begins with a number
$seven-learn // Unacceptable character: -
$info@7learn.com // Unacceptable characters: @ and .
$sevenLearn!com // Unacceptable character: !
$sevenLearn+com // Unacceptable character: +
خط 1: $7learn
با عدد شروع شده است، در نتیجه غیر مجاز است.
خط 2: seven-learn
دارای کاراکتر غیر مجاز -
میباشد.
خط 3: info@7learn.com
دارای دو کاراکتر غیر مجاز @
و .
میباشد.
خط 4: sevenLearn!com
دارای کاراکتر غیر مجاز !
میباشد.
خط 5: sevenLearn+com
دارای کاراکتر غیر مجاز +
میباشد.
همانطور که گفتیم، متغیرها در زبان PHP، به حروف بزرگ و کوچک حساس هستند. به مثال زیر توجه کنید:
<?php
$a = 1;
$A = 3;
echo $a . '<br>'; // 1
echo $A . '<br>'; // 3
وقتی دستور echo $a;
اجرا شود، مقدار 1 چاپ میشود و زمانیکه دستور echo $A;
اجرا شود، مقدار 3 چاپ میشود.
حالا که با اصول متغیرها در PHP آشنایی پیدا کردید، به مثال زیر توجه کنید:
<?php
$a = 1;
$b = 2;
$c = $a + $b;
echo $c . '<br>'; // 3
echo $a + $b . '<br>'; // 3
echo $c + $a + $b . '<br>'; // 6
echo $a + 5 + $b . '<br>'; // 8
$a = 10;
echo $a + $b . '<br>'; // 12
echo $z; // Notice: Undefined variable: z !!!
$a = 20;
echo $a; // 20
برنامه خط به خط اجرا میشود:
خط 2 و 3 و 4 و 5 و 6 و 7 و 8: متغیرها تعریف شده اند و یک سری روابط حاصل جمع انجام شده است و در نهایت با دستور echo
مقادیرشان به سمت مرورگر ارسال شده است.
خط 10: متغیر a$
دوباره مقدار دهی شده است بنابراین مقدارش به 10 تغییر خواهد کرد.
خط 11: در نتیجه حاصل جمع $a + $b
یعنی 10 + 2 = 12
میشود.
خط 13: دستور echo $z;
میخواهد مقدار $z
را چاپ کند، اما ازآنجاییکه این متغیر قبلاً تعریف نشده است، با خطا مواجه میشود.
نکته: البته خطای Notice، منجر به توقفِ مفسر نخواهد شد و تفسیر، ادامه پیدا میکند.
خط 15 و 16: همانطور که میبینید، تفسیر متوقف نشده و متغیر $a
برای بار دیگر مقدارش عوض شده و در خط بعدی، چاپ میشود.
برای درک بیشتر، کدهای مثال بالا را خودتان اجرا کنید.
همانطور که در مثال بالا دیدی در خط 13، میخواستیم متغیر $z
را چاپ کنیم، ولی بدلیل اینکه $z
تعریف نشده بود، با یک Notice مواجه شدیم.
بطور پیش فرض، متغیرها در زبان PHP با اختصاص دادن یک مقدار تعریف میشوند.
مثال: $a = 1;
در این دستور، مقدار 1 را درون متغیر $a
میریزیم.
همچنین میتوانید، متغیری با مقدار خالی تعریف کنید: $a = "";
حالا به مثال زیر توجه کنید:
<?php
$a = 2;
$b = $a; // $b = 2;
echo $a . '<br>'; // 2
echo $b . '<br>'; // 2
$a = 10;
echo $a . '<br>'; // 10
echo $b . '<br>'; // 2
خط سوم: دستور $b = $a
نشان میدهد که یک کپی از مقدار $a
یعنی 2 را در متغیر $b
ریخته ایم.
با اینکه مقدار دو متغیر برابر 2 میباشد، اما توجه داشته باشید که این دو متغیر، هیچ ارتباطی باهم ندارند. یعنی اگر متغیر $a
مقدارش تغییر کند،متغیر $b
تغییر نمیکند.
برای درک این موضوع، دوباره به کد بالا توجه کنید:
خط 8: مقدار متغیر $a
تغییر کرده و برابر 10 شده است.
خط 9: $a
چاپ شده است و مقدار 10 نمایش داده.
خط 10: $b
چاپ شده که مقدارش 2 میباشد.
متغیرهای داینامیک:(Variable Variables)
زبان PHP این اجازه را به شما میدهد تا از متغیرهای داینامیک استفاده کنید. این قابلیت، متغیرهای متغیر(Variable Variables) نامیده میشود.
با استفاده از این قابلیت، شما میتوانید، متغیرهایی به شکل $$var
و $$$var
و ... داشته باشید.
به مثال زیر توجه کنید:
<?php
$name = 'mohsen';
$$name = 'movahed';
echo $$name . '<br>'; // movahed
echo $mohsen . '<br>'; // movahed
همانطور که میبینید، عملاً با معرفی $$name = 'movahed';
انگار نوشته ایم $mohsen = 'movahed';
کل ماجرای متغیرهای متغیر همین است. حالا شما میتوانید به روشهای متفاوتی، آنرا پیاده کنید:
<?php
$e = 'a';
$d = 'e';
$c = 'd';
$b = 'c';
$a = 'b';
echo $a . '<br>'; // b
echo $$a . '<br>'; // c
echo $$$a . '<br>'; // d
echo $$$$a . '<br>'; // e
echo $$$$$a . '<br>'; // a
echo $$$$$$a . '<br>'; // b
echo $$$$$$$a . '<br>'; // c
همچنین اگر میخواهید یک متغیر را با استفاده از چند رشته یا متغیر بسازید، کافیست عبارات را با علامت .
بهم بچسبانید و داخل {...}
قرار دهید:
<?php
${'a' . 'b' . 'c'} = 1; // $abc = 1;
$prefix = "pre_";
${$prefix . 'one'} = "First Variable <br />";
${$prefix . 'two'} = "Second Variable <br />";
${$prefix . 'three'} = "Third Variable <br />";
echo $pre_one;
echo $pre_two;
echo $pre_three;
?>
همانطور که در مثال میبینید، با متغیر $prefix
که مقدار pre_
دارد و رشته ی one
یک متغیر، بنام $pre_one
ساخته ایم.
برای چسباندن عبارات در PHP از علامت .
استفاده میشود.
خروجی مثال بالا، به شکل زیر است:
First Variable
Second Variable
Third Variable
متغیرهای ارجاعی:
روش دیگری که میتوان در زبان PHP متغیری را تعریف کرد، Assign by Reference میباشد.
یعنی میتوانیم متغیری بسازیم که به مقدارِ یک متغیر دیگر اشاره کند.
برای مثال دستور $b = &$a
را در نظر بگیرید، متغیر $b
به متغیر $a
ارجاع داده شده است. درواقع با این عمل، متغیر $b
نام مستعاری برای متغیر اصلی یعنی $a
خواهد بود. بنابراین اگر متغیر اصلی $a
برابر 10 باشد، متغیر مستعار یعنی $b
هم برابر 10 میباشد.
اگر متغیر اصلی $a
مقدارش عوض شود، متغیر مستعار $b
هم مقدارش تغییر خواهد کرد و همچنین برعکسش، اگر متغیر مستعار $b
مقدارش تغییر کند، مقدار متغیر اصلی یعنی $a
هم تغییر خواهد کرد.
برای تخصیص متغیر اصلی به روش ارجاعی، باید قبل از آن از علامت &
استفاده شود.
<?php
$a = 10;
$b = &$a;
echo $a . '<br>'; // 10
echo $b . '<br>'; // 10
$b = 1396;
echo $a . '<br>'; // 1396
echo $b . '<br>'; // 1396
همانطور که در مثال بالا میبینید، متغیر $a
متغیر اصلی میباشد و متغیر $b
متغیر مستعار میباشد.
بنابراین متغیر $b
به متغیر اصلی یعنی $a
اشاره میکند. درنتیجه، هر دو متغیر، به یک مقدار یکسان دسترسی دارند.
در مثال ملاحظه میکنید، با تغییر $b
به مقدار 1396، مقدار متغیر $a
هم تغییر کرده است.
نکته: توجه داشته باشید که، فقط برای متغیرها میتوانید از روش Assign by Reference استفاده کنید.
<?php
$bar = &$foo; // Valid.
$bar = 25;
echo $foo; // 25
$bar = &(24 * 7); // Invalid.
function test()
{
return 25;
}
$bar = &test(); // Invalid.
?>
با توجه به نکته ی بالا، فقط خط دوم، صحیح میباشد.
نکته: Assign by Reference با Pointerها در زبان C فرق میکنند و کارایی محدودی دارند.
نکته پایانی: برای حذف یک یا چندین متغیر، میتوانید از تابع unset()
استفاده کنید:
<?php
$a = 'a';
$b = 'b';
$c = 'c';
$d = 'd';
echo $a; // a
unset($a);
unset($b, $c, $d);
echo $a; // Notice: Undefined variable: a