فهرست محتوا
در این بخش از آموزش PHP با آموزش متغیرها و ثابت ها در PHP در خدمتتونم. بحث رو طولانی نکنیم و مستقیم بریم سراغ آموزش متغیرها و ثوابت در PHP.
متغیرها در PHP
در زبان PHP برای تعریف متغیرها باید از یک علامت دلار ( $ ) پیش از نام متغیر استفاده کنید. هنگام تعریف متغیر در PHP باید به یک سری نکات توجه داشته باشید:
- برخلاف خیلی از زبان های برنامه نویسی مثل خانواده C، شما در PHP نیازی به تعیین نوع داده ای متغیر به هنگام تعریف اون ندارید. یعنی وقتی میخوای متغیر تعریف کنی لازم نیست حتما نوع متغیر رو از قبل تعیین کنی. وقتی متغیر تعریف بشه و مقدار بگیره، متناسب با نوع داده ذخیره شده در اون، نوع متغیر هم تعریف میشه.
- وقتی متغیری رو تعریف کردی، می تونی در همه جای کدها از اون استفاده کنی. کافیه نام متغیر رو فراخونی کنی!
- علامت = به معنای تساوی نیست. بلکه به معنای تخصیص هست. یعنی وقتی عبارتی مثل زیر رو مینویسی، مقدار سمت راست تساوی، در متغیر شما که در سمت چپ قرار داره ذخیره میشه!
- متغیرها مثل یک ظرف هستن که مقدار یا مقادیری رو درون خودشون نگه می دارن
سینتکس تعریف متغیر در PHP
$variablename=value;
توجه کنید در پایان هر خط از دستورات PHP باید یک سمی کولن ; قرار بگیرد.
قوانینی که در تعریف متغیرها در PHP باید رعایت کنید:
- پیش از نام متغیرها در PHP باید یک علامت دلار $ شروع بشه و در ادامه بدون هیچ فاصله ای نام متغیر قرار بگیره.
- نام متغیر فقط و فقط باید شامل حروف انگلیسی (کوچک یا بزرگ) و اعداد (0 تا 9) و علامت آندرلاین ( _ ) باشه.
- نام متغیر نمیتونه با عدد شروع بشه. یعنی اولین کاراکتر نام یا باید حرف انگلیسی باشه یا _ (آندرلاین). نمیتونه با عدد شروع بشه اما میتونه از کاراکتر دوم به بعد عدد قرار بگیره. این قانون که نام متغیر نباید با عدد شروع بشه، در تمام زبان های برنامه نویسی وجود داره.
- نام متغیرها نمیتونه حاوی فاصله (همون space) باشه. باید کاراکترها پشت هم و بدون فاصله قرار بگیرن.
- نام متغیرها در PHP به حروف کوچک و بزرگ حساسه! به عبارتی case-sensitive هست. یعنی متغیر
$Age
و$age
دوتا متغیر جدان. ما با هم قرار داد می کنیم از این به بعد از حروف کوچیک در نام گذاری استفاده کنیم.
متغیر در PHP – تعریف متغیر صحیح، اعشاری و رشته ای در PHP
اجازه بدید چندتا مثال از تعریف متغیرها در PHP بزنم!
<?php $str="i am ebr"; $x=10; $y=10.2; echo "string is: $str <br/>"; echo "integer is: $x <br/>"; echo "float is: $y <br/>"; ?>
در این مثال، 3 تا متغیر تعریف کردم! یک متغیر رشته ای با نام $str
، یک متغیر عدد صحیح با نام $x
و یک متغیر اعشاری با نام $y
. توجه کنید که لازم نیست نوع متغیر رو شما تعیین کنی. شما فقط به متغیر مقدار بده، نوع متغیر خودکار تعیین میشه!
خروجی کد بالا چیزی شبیه اینه:
string is: i am ebr integer is: 10 float is: 10.2
متغیر در PHP – جمع دو متغیر
یه مثال ساده دیگه، جمع دو متغیر در PHP:
<?php $num1=10; $num2=2; $sum=$num1+$num2; echo $sum; ?>
حاصل: برابر 12 میشه
متغیر در PHP – حساسیت به حروف کوچک و بزرگ
در PHP نام ها به حروف کوچک و بزرگ حساس هستند. نام متغیرها هم به حروف کوچک و بزرگ حساسه!
<?php $color="Black"; echo "My Hair is " . $color . "<br>"; echo "My Car is " . $COLOR . "<br>"; echo "My hat is " . $coLOR . "<br>"; ?>
خروجی:
My Hair is Black Warning: Undefined variable $COLOR in C:\xampp8_2_4\htdocs\project1\index.php on line 4 My Car is Warning: Undefined variable $coLOR in C:\xampp8_2_4\htdocs\project1\index.php on line 5 My hat is
متغیر در PHP – قوانین تعریف متغیر در PHP
قبلا گفتم که نام متغیرها در PHP باید با حروف یا کاراکتر آندرلاین شروع بشه! نمیتونید نام متغیرها رو با عدد یا کاراکتر دیگه ای تغییر بدی!
<?php $name="ebr";//letter (valid) $_name="ebr";//underscore (valid) echo "$name <br/> $_name"; ?>
خروجی:
ebr ebr
اما اگه اینطور متغیر تعریف کنی، خطا دریافت می کنی:
<?php $4name="ebr";//letter (valid) $*name="ebr";//underscore (valid) echo "$4name <br/> $*name"; ?>
خروجی:
Parse error: syntax error, unexpected integer "4", expecting variable or "{" or "$" in C:\xampp8_2_4\htdocs\project1\index.php on line 2
ناحیه دید متغیرها در PHP
منظور از ناحیه دید یا scope برای یک متغیر، آن ناحیه یا محدوده ای هست که میشه به اون متغیر دسترسی داشت. به عبارتی اسکوپ یا ناحیه دید اون بخشی از کدهای شماست که در آن ناحیه متغیر مورد نظر قابل دسترسه!
PHP دارای 3 نوع ناحیه دید برای متغیرهاست:
- ناحیه محلی یا Local
- ناحیه سراسری یا Global
- ناحیه استاتیک یا Static
متغیر محلی Local Variable
وقتی متغیری را درون یک تابع تعریف می کنید، آن متغیر، متغیر محلی است. یعنی این متغیر فقط در همان تابع در دسترس بوده و خارج از آن تعریف نشده یا ناموجود محسوب میشه!
یعنی تابع دارای ناحیه دید محلی بوده و خارج از اون قابل دسترس نیستن.
اجازه بدید تا با ذکر مثال این موضوع رو بررسی کنیم:
<?php function local_variable() { $number = 80; //local variable echo "Local variable declared inside the function is: ". $number; } local_variable(); ?>
خروجی:
Local variable declared inside the function is: 80
حالا کد زیر رو بررسی کنید:
<?php function ebrfunction() { $lang = "PHP"; echo "Web development language: " .$lang; } ebrfunction(); //using $lang (local variable) outside the function will generate an error echo $lang; ?>
خروجی:
Web development language: PHP Warning: Undefined variable $lang in C:\xampp8_2_4\htdocs\project1\index.php on line 9
خوب میبینید که وقتی یک متغیر درون تابع تعریف میشه، خارج از آن در دسترس نخواهد بود.
متغیرهای سراسری Global Variable
متغیرهای سراسری متغیرهایی هستن که خارج از محیط تابع تعریف میشن! وقتی متغیری رو خارج تابع تعریف کنی، متغیر شما سراسری بوده و در همه جای برنامه شما در دسترسه!
برای اینکه به یک متغیر سراسری در داخل یک تابع دسترسی داشته باشی، باید از کلمه کلیدی سراسری GLOBAL استفاده کنی! اما برای دسترسی به همون متغیر در خارج تابع نیازی به استفاده از GLOBAL نیست!
پس چی شد؟؟
- اگه می خوای متغیر سراسری تعریف کنی،فقط کافیه اون رو خارج تابع تعریف کنی!
- حالا میخوای این متغیر رو فراخونی کنی یا استفاده کنی، اگر میخوای درون تابع از اون استفاده کنی باید از GLOBAL استفاده کنی! اما اگه میخوای در محیطی خارج تابع استفاده کنی، نیازی به GLOBAL نداری!
اجازه بدید با ذکر مثال این موضوع رو بررسی کنیم:
<?php $name = "Rahmat Ebr"; //Global Variable function global_var() { global $name; echo "Variable inside the function: ". $name; echo "</br>"; } global_var(); echo "Variable outside the function: ". $name; ?>
خروجی:
Variable inside the function: Rahmat Ebr Variable outside the function: Rahmat Ebr
خوب! من متغیر $name
رو بیرون تابع فراخونی کردم! وقتی خواستم تو تابع، یعنی در خط 5 اون رو فراخونی کنم، مجبور شدم از کلمه کلیدی global استفاده کنم!
در خارج تابع و در خط 10بدون نیاز به کلمه کلیدی global میتونم متغیر رو فراخونی کنم!
یه مثال دیگه ببینیم:
<?php $name = "Rahmat Ebr"; //global variable function global_var() { echo "Variable inside the function: ". $name; echo "</br>"; } global_var(); ?>
خروجی:
Warning: Undefined variable $name in C:\xampp8_2_4\htdocs\project1\index.php on line 5 Variable inside the function:
می بینید که خطا می گیریم! چرا؟ چون متغیر رو در خط 2 تعریف کردیم (متغیر سراسری) و بعد در خط 5 اون رو فراخونی کردیم، بدون اینکه از کلمه global استفاده کنیم! نتیجه اینکه خطا دریافت می کنیم. چه خطایی؟؟ میگه این متغیر تعریف نشده!!
استفاده از $GLOBALS
به جای global
یه روش دیگه هم برای استفاده از متغیرهای سراسری درون تابع وجود داره و اون استفاده از شی $GLOBAL
هست.
مثال:
<?php $num1 = 10; //global variable $num2 = 12; //global variable function global_var() { $sum = $GLOBALS['num1'] + $GLOBALS['num2']; echo "Sum of global variables is: " .$sum; } global_var(); ?>
خروجی:
Sum of global variables is: 22
شی GLOBAL خودش یه شی سراسریه که تموم متغیرهای برنامه شما رو تو خودش ذخیره میکنه! پس میتونی با فراخونی این شی هر متغیری رو هر جا دوست داری فراخونی کنی!
نکته مهم: اگه دوتا متغیر همنام که یکی محلی و یکی سراسری باشه رو بخوای داخل تابع فراخونی کنی، اونی که محلیه، اولویت بالاتری نسب به سراسری داره!
مثال:
<?php $x = 5; function myfunc() { $x = 7; echo "value of x: " .$x; } myfunc(); ?>
خروجی:
value of x: 7
ما یه متغیر سراسری داشتیم با مقدار 5 و همون متغیر رو به صورت محلی داشتیم با مقدار 7، اما دیدید که هنگام فراخونی اون متغیر محلیه اولویت بالاتری داشته!
متغیرهای استاتیک Static Variable
یکی از خصوصیات PHP اینه که بعد از اجرای تابع، اون متغیر رو آزاد میکنه یا به عبارتی از برنامه حذف می کنه!
اما گاهی نیاز داریم بعد اجرای یک تابع، اون متغیر مقدارش رو نگه داره! به همین دلیل باید اون رو به صورت یک متغیر استاتیک تعریف کنیم.
برای تعریف یک متغیر استاتیک باید از کلمه کلیدی static قبل متغیر استفاده بشه. به این متغیر میگیم متغیر Static.
متغیرهای Static فقط به صورت محلی و درون تابع قابل تعریف هستند. درون تابع تعریف می شن اما بیرون تابع هم شناخته شده و قابل دسترسی هستن.
مثال:
<?php function static_var() { static $num1 = 3; //static variable $num2 = 6; //Non-static variable //increment in non-static variable $num1++; //increment in static variable $num2++; echo "Static: " .$num1 ."</br>"; echo "Non-static: " .$num2 ."</br>"; } //first function call static_var(); //second function call static_var(); ?>
خروجی:
Static: 4 Non-static: 7 Static: 5 Non-static: 7
توجه کنید.ما متغیر name1 رو درون تابع و به صورت static تعریف کردیم. مقدار 3 به اون دادیم. در هر بار فراخونی تابع، یک واحد مقدار اون افزایش پیدا میکنه! یعنی وقتی بار اول اجرا بشه مقدارش میشه 4 و بعد اجرا این مقدار رو حفظ میکنه. در اجرای بعدی، مجددا به مقدار 4 یک واحد اضافه میشه و میشه 5.
اما متغیر num2 متغیر محلیه! هر بار که فراخونی کنیش، مقدار اول 6، بعد یک واحد اضافه میشه و میشه 7. تو فراخونی بعدی، این مقدار (یعنی 7) حفظ نمیشه. بر میگرده به مقدار اولیه یعنی 6 و مجددا اضافه میشه و میشه 7. یعنی 100 بار هم تابع رو فراخونی کنی، با مقدار این متغیر بعد اجرا 7 میشه!
ثوابت در PHP
ثابت های PHP نام یا شناسه (Identifier) ای هستن که یک بار تعریف و مقداردهی می شن و تا پایان برنامه دیگه قابل تغییر نیستن. البته یه نوع ثابت ها هستن که بهشون میگن ثابت جادویی و مقدارشونم تغییر میکنه اما در واقع نمیشه بهشون گفت ثابت! چون تغییر می کنن دیگه!
حالا چطور میشه ثابت های PHP رو تعریف کرد؟ دو روش برای این کار وجود داره:
- تعریف ثابت با تابع
define()
- تعریف ثابت با کلمه کلیدی const
ثابت ها شبیه متغیر هستن! مثل یک ظرف مقداری رو درون خودشون نگه می دارن! اما برخلاف متغیرها نمیشه مقدار درون این ظرف رو تغییر داد.
از طرفی وقتی متغیری رو تعریف می کنی، میتونی بهش مقدار ندی! اما ثوابت همون زمان که تعریف میشن باید مقدار هم بگیرن و نمیتونی اون ها رو بدون مقدار رها کنی!
نام گذاری ثوابت همون قوانین نام گذاری متغیرها رو دنبال می کنن. برای مثال نمیشه نام ثابت رو با عدد شروع کرد. بلکه باید با حروف انگلیسی یا آندرلاین نام گذاری رو شروع کرد.
به طور معمول برای نام گذاری ثابت ها از حروف بزرگ انگلیسی استفاده میشه تا درون کدها بشه اون ها رو تشخیص داد.
برخلاف متغیرها، ثوابت به صورت خودکار سراسری هستن و در تمام اسکریپت در دسترس خواهند بود.
تعریف ثابت با دستور define
یکی از روش های تعریف ثابت استفاده از تابع define()
هست. syntax یا دستور نحوی تعریف ثابت با این تابع به این صورته:
define(name, value, case-insensitive)
- name: نام ثابت
- value: مقدار ثابت
- case-insensitive: مشخص می کنید که نام ثابت باید به حروف کوچک یا بزرگ حساس باشه یا نه. به صورت پیش فرض مقدارش false یعنی به حروف کوچک و بزرگ حساسه!
یه مثال ببینیم:
<?php define("MESSAGE","Hello PHP Geeks"); echo MESSAGE; ?>
خروجی:
Hello PHP Geeks
خوب ما یه ثابت به اسم MESSAGE تعریف کردیم و مقدار Hello PHP Geeks رو درون اون ذخیره کردیم و نمایش دادیم!
در این مثال نام متغیر به حروف کوچک یا بزرگ حساسه! حالا یه نمونه غیرحساس ببینیم!
<?php define("MESSAGE","Hello PHP Geeks",true); //not case sensitive echo MESSAGE, "</br>"; echo message; ?>
خروجی:
Hello PHP Geeks
Hello PHP Geeks
نکته خیلی مهم: از نسخه 7.3 به بعد دیگه از این مقدار سوم پشتیبانی نمیشه! یعنی اگه نسخه PHP شما بیشتر از این مقداره، دیگه نمیتونی از true و false استفاده کنی! یعنی به صورت پیش فرض نام ثابت به حروف کوچک و بزرگ حساسه و تمام! یعنی باید دقیقا همون طور که تعریف می کنی ثابت روفراخوانی کنی! اگه با حروف کوچیک تعریف کردی با حروف کوچیک فراخونی کن!
تعریف ثابت با کلمه کلیدی const در PHP
در PHP یه کلمه کلیدی به نام const داریم که برای تعریف یک ثابت استفاده میشه. کلمه کلیدی const یک تابع نیست، بلکه یک کلمه کلیدی یا یک ساختار زبانه! وقتی ثابتی رو با این کلمه کلیدی تعریف می کنی، به حروف کوچک و بزرگ حساس میشن!
یعنی کلا در PHP و از نسخه 7.3 به بعد با هر روشی که ثابتی رو تعریف کنی، در هر صورت به حروف کوچک و بزرگ حساسه!
مثال:
<?php const MESSAGE="Hello PHP Geeks"; echo MESSAGE; ?>
خروجی:
Hello PHP Geeks
چاپ ثابت با تابع Constant
یه راه دیگه برای چاپ مقادیر ثوابت وجود داره که از تابع constant()
برای این کار استفاده می کنیم.
دستور نحوی این تابع به این صورته:
constant (name)
مثال:
<?php const MESSAGE="Hello PHP Geeks"; echo MESSAGE."<br>"; echo constant("MESSAGE"); //Both are Same ?>
خروجی:
Hello PHP Geeks
Hello PHP Geeks
جالبه در هر صورت باید از echo و نام ثابت استفاده کنی! پس دیگه چه نیازی به این تابع هست؟؟ نیست عزیزم! همون روش قبلی اوکیه و لازم نیست از این استفاده کنی!
مقایسه متغیرها و ثابت ها در PHP
خوب اجازه بدید در پایان بحث، یه مقایسه بین متغیرها و ثوابت داشته باشیم:
متغیر | ثابت |
---|---|
میتونی متغیر رو تعریف کنی و مقدار ندی! بعدا مقدار بدی! | همون زمانی که تعریف میشه باید بهش مقدار بدی |
برای تعریف نیاز به تابع یا کلمه کلیدی خاصی نداره | فقط با تابع define() و کلمه کلیدی const قابل تعریفه |
قبل نام ثابت باید علامت $ قرار بگیره | نیازی به علامت $ قبل نام ثابت نیست |
میتونن متغیر محلی باشن یا به صورت سراسری یا استاتیک تعریف بشن | ثوابت به صورت ذاتی سراسری هستن و ناحیه دید یا اسکوپ دیگه ای ندارن |
مقدارشون رو هرچندبار که بخوای میتونی تغییر بدی | مقدارشون یکبار تعریف میشه و دیگه قابل تغییر نیست |
ثوابت جادویی
این آموزش ادامه داره…..
خوب آموزش ما در این بخش هم به اتمام رسید. آموزش قبلی یعنی آموزش PHP – نمایش خروجی در PHP با 2 روش (آموزش echo و print) رو میتونید در این لینک ببینید.