در این پست با متغیرها، نحوه تعریف و ساخت آنها، قوانین نام گذاری و انواع مختلف آن در زبان اسکریپ نویسی PHP آشنا خواهید شد.
این پست از سری آموزشهای زبان PHP بوده و جلسه چهارم آن است.
متغیر در PHP
متغیرهای مقادیری هستند که در طول اسکریپت، میتوانند در شرایط مختلف یا طبق ورودیهایی تغییر کنند.
بر خلاف اکثر زبانهای برنامه نویسی که باید ساختار داده متغیر را مشخص کنیم، یعنی بگوییم که مثلاً این متغیر عدد صحیح ذخیره خواهد کرد یا اعشاری یا عبارت متنی و رشته و … ، به صورت مستقیم متغیر را تعریف کرده سپس هسته پردازشی PHP، خود نوع ساختار داده را تشخیص داده و با آن کار خواهد کرد.
تعریف متغیر
در زبان پی اچ پی این متغیرها با یک علامت دلار ($) و سپس نام، مشخص میشوند. برای تعریف یا ساختن یک متغیر، کافیست طبق مثال زیر عمل کنیم:
<?php
$name = “value”;
?>
بجای name نام متغیر و بجای “value” مقدار اولیه متغیر تعریف میشود. بگذارید مثالهای بیشتری بزنیم:
<?php
$welcome_text = “Welcome to bytegate.io”;
$email = “[email protected]”;
$born_year = 1375;
$age = 1394 – $born_year;
$weight = 86.56;
$isHere = true;
echo $welcome_text;
echo “<br> Your Email is $email and your age is $age and your weight is $weight kg.”;
if ($isHere = true){
echo “<br> You are here!”;
}else{
echo “<br> You are NOT here!”;
}
?>
خروجی:
Welcome to bytegate.io
Your Email is [email protected] and your age is 19 and your weight is 89.56 kg.
You are here!
توضیح:
در دو خط اول، مقادیر متنی را در داخل دو متغیر ذخیره کرده ایم. در خط سوم مقدار عدد صحیح ۱۳۷۵ را ذخیره کرده و در خط پس از آن حاصل تفاضل ۱۳۹۴ با مقدار موجود در متغیر born_year را ذخیره کرده ایم (که حاصل آن سن یک نفر است). در متغیر weight نیز یک عدد اعشاری ذخیره کرده و در isHere یک مقدار “درست” ذخیره کرده ایم. یعنی ساختار داده isHere بولین شده و قادر به دریافت مقادیر “درست” یا “نا درست” خواهد بود.
سپس متغیرهای قبلی را چاپ کرده و با یک دستور IF که بعداً توضیح داده خواهد شد، مقدار isHere را چک کرده ایم. چون isHere برابر true است و نه false، متن You are here نیز چاپ شده است.
بنابراین همانطور که دیدید، میتوانیم بدون توجه به ساختار داده متغیر خود را ساخته و مقادیر آن را تغییر دهیم. پردازشهای گوناگونی بر روی آن انجام داده، مقایسات مختلفی را بررسی کرده و آنها را چاپ کنیم.
قوانین نامگذاری متغیر
- متغیرها با یک علامت دلار ($) شروع شده و پس از آن نام آنها بدون هیچ فاصلهای نوشته میشود.
- نام متغیرها تنها میتواند شامل حروف انگلیسی (A-z)، اعداد (۰-۹) و علامت آندرلاین (_) باشد.
- اسم متغیرها حتماً باید با یک حرف یا علامت _ شروع شود. استفاده از عدد در ابتدای نام متغیر صحیح نیست.
- متغیرها حساس به نامهستند یعنی متغیری با نام age با متغیری با نام AGE متفاوت است.
قلمروی متغیرها
در زبان PHP ما سه نوع متغیر داریم که دارای قلمرو (Scope) متفاوتی با دیگری داشته و در جاهایی نمیتوان به آنها دسترسی داشت. این نوعها عبارت اند از:
- متغیرهای سراسری یا گلوبال (Global)
- متغیرهای محلی یا لوکال (Local)
- متغیرهای ایستا یا استاتیک (Static)
متغیرهای سراسری
متغیرهایی که خارج از یک تابع تعریف بشوند، حالت سراسری یا گلوبال دارند. به این صورت:
<?php
$x = 10;
function Example (){
echo “x inside the function is $x”;
}
Example ();
echo “x outside the function is $x”;
?>
خروجی:
خطا: متغیر x پیدا نشد
x outside the function is 10
توضیح:
چون ما متغیر x را خارج از یک تابع تعریف کردهایم، در داخل تابع Example بدون وارد کردن آن (در بند بعدی توضیح داده شده)، نمیتوانیم استفاده کنیم به عبارت دیگر این متغیر برای پردازنده PHP شناسایی نشده خواهد بود و به همین دلیل یک خطا نشان خواهد داد. بنابراین خروجی صدا زدن تابع Example یک خطا خواهد بود. اما در اکوی خارج از تابع، متغیر x کاملاً برای ما شناخته شده بوده و بنابراین بدون مشکل چاپ خواهد شد.
متغیرهای محلی
متغیرهای محلی در داخل توابع تعریف شده و خارج از آن یا در توابع دیگر قابل دسترسی نخواهند بود. به عنوان مثال:
<?php
function LocalVar (){
$x = 10;
echo “x inside the function is $x”;
}
LocalVar ();
echo “x outside the function is $x”;
?>
خروجی:
x inside the function is 10
خطا: متغیر x پیدا نشد
توضیح:
دقیقاً برعکس متغیرهای سراسری، چون ما x را داخل تابع LocalVar تعریف کردهایم، بنابراین در داخل تابع بدون مشکل در دسترس خواهد بود. یعنی با صدا زدن تابع، بدون هیچ خطایی متغیر استفاده شده و چاپ خواهد شد. اما اگر متغیر را خارج از همان تابع فراخوانی کنیم، یک خطا مشاهده خواهیم کرد چون برای هسته این متغیر در خارج از آن تابع، ناشناخته است.
استفاده از متغیر سراسری در داخل توابع
همانطور که در بند مربوط به متغیرهای سراسری خواندید، دیدیم که به صورت مستقیم نمیتوانیم از متغیرهای سراسری در داخل توابع استفاده کنیم. برای حل کردن این مشکل، از دستور global در داخل توابع استفاده میکنیم. توجه کنید که با وارد کردن متغیر سراسری در داخل تابع، هر تغییری که روی آن انجام شود، در متغیر سراسری اعمال خواهد شد. به مثال زیر دقت کنید:
<?php
$x = 10;
function GlobalInLocal (){
global $x;
echo “x called inside the function is $x”;
$x = $x ۶;
}
GlobalInLocal ();
echo “<br> x called outside the function is $x”;
?>
خروجی:
x called inside the function is 10
x called outside the function is 60
توضیح:
مانند مثال متغیر سراسری، یک متغیر در خارج از تابع تعریف کرده ایم یعنی یک متغیر سراسری در دست داریم. حال برای این که در داخل تابع GlobalInLocal بتوانیم از آن استفاده کنیم، از دستور global $x استفاده میکنیم. بدین ترتیب تابع ما دسترسی به این متغیر سراسری را خواهد داشت. مقدار متغیر را چاپ کرده سپس آن را در ۶ ضرب میکنیم. چون متغیر سراسری است، در x اصلی اعمال میشود یعنی مقدار x = 60 خواهد بود. با استفاده از اکوی دیگر، مقدار را چاپ میکنیم و میبینیم که عدد ۶۰ برگردانده میشود.
متغیرهای ایستا
متغیرهای استاتیک نوع دیگری از متغیرها هستند که در داخل توابع استفاده شده و برخلاف متغیر محلی که با هر بار اجرا شدن تابع مقدار آن ریست میشود، مقدار متغیر استاتیک همیشه ثابت میماند.
برای درک بهتر، یک متغیر محلی ساده را در نظر بگیرید:
<?php
function LocalVar (){
$x = 0;
echo “$x <br>”;
$x = $x + 1;
}
LocalVar ();
LocalVar ();
LocalVar ();
?>
خروجی:
۰
۰
۰
حال یک متغیر استاتیک میسازیم. متغیر استاتیک با دستور static در ابتدای متغیر مشخص میشود. به مثال زیر توجه کنید:
<?php
function StaticVar (){
static $x = 0;
echo “$x <br>”;
$x = $x + 1;
}
StaticVar ();
StaticVar ();
StaticVar ();
?>
خروجی:
۰
۱
۲
توضیح:
هر بار که تابع فراخوانی میشود، مقدار متغیر x که به صورت static تعریف شده، ثابت باقی میماند به عبارت دیگر مثل متغیرهای محلی دیگر، با هر بار فراخوانی تابع ریست نشده و مقدار قبلی خود را حفظ میکند بنابراین با هر بار فراخوانی، مقداری آن به اضافه ۱ شده و ذخیره میگردد.
نکته: کاری که متغیرهای Static انجام میدهند را میتوان با متغیرهای Global پیاده سازی کرد.
salam mituni komak koni ke chejory code bazi blocky kong ro to c++ bezanam?!?!?
سلام. متاسفانه آموزش C++ فعلا توی سایت قرار داده نمیشه.
ممنون مطلب مفیدی بود آقای نصیری
زنده باشید آقا امیر.
سلام ببخشید میشه بگید چطور باید محتوای یک متغیر در php حذف کرد….
ممنون میشم
سلام. خیلی راحت میتونید از تابع unset استفاده کنید. اینجوری انگار متغیر تعریف نشده. یا میتونید مقدار اونو به NULL تغییر بدین. موفق باشید.