متغیرها در زبان PHP

درسنامه درس 3 از سری آموزش PHP 7

variables یا متغیرها در php

متغیرها نگهدارنده های اطلاعات هستند. نام متغیرها در php با علامت دلار ($) شروع می شود و سپس نام آن ذکر می شود:

<!DOCTYPE html>
<html>
<body>

<?php
$txt = "Hello world!";
$x = 5;
$y = 10.5;

echo $txt;
echo "<br>";
echo $x;
echo "<br>";
echo $y;
?>

</body>
</html>

مشاهده ی خروجی

پس از اجرای دستورات بالا تمامی متغیرها مقدار سمت راست مساوی را نگه می دارند؛ مثلا txt$ مقدار !Hello world را نگه می دارد و ...

یکی از نکته هایی که باید به یاد داشته باشید این است که اگر بخواهید مقادیر متنی را به متغیری بدهید باید آن را درون علامت quotation (تلفظ می شود کُ تِی شِن) قرار دهید:

علائم نگارشی برنامه نویسی
علائم نگارشی برنامه نویسی

همچنین به یاد داشته باشید که برخلاف دیگر زبان های برنامه نویسی، در زبان php هیچ دستور خاصی برای ساخت متغیرها وجود ندارد. فرآیند ساخت متغیر در زبان php بدین صورت است که شما یک مقدار را به یک متغیر می دهید و آن متغیر سریعا ساخته می شود.

برای اینکه بهتر بتوانید متغیرها را درک کنید، آن ها را ظرف هایی در نظر بگیرید که مقادیری را داخل آن ها می گذاریم. قوانین نام گذاری این متغیرها محدود هستند، بنابراین می توانید در نام گذاری خلاقیت به خرج دهید. قوانین نام گذاری متغیرها این است که:

  • نام متغیر باید با علامت $ شروع شده و سپس نام آن ذکر شود (مثلا userID$).
  • اولین حرف بعد از علامت $ باید یک حرف انگلیسی و یا underscore (علامت آندرلاین _) باشد.
  • بر اساس مورد قبلی می توان گفت نام متغیر نمی تواند با عدد شروع شود (مثال غلط: 4userID$).
  • نام متغیرها تنها می تواند شامل اعداد، حروف انگلیسی و علامت آندرلاین (_) باشد.
  • متغیرها به بزرگی و کوچکی حروف انگلیسی حساس هستند بنابراین userID$ و UserID$ و uSerID$ و userId$ و ... همگی متغیرهای جداگانه و مختلفی هستند.

از موارد بالا مهم ترین مورد، مورد آخر است چرا که همیشه از یاد برنامه نویسان تازه کار می رود و برنامه به مشکلات متعدد برمی خورد. همیشه از یک استایل نوشتاری برای نوشتن نام متغیرها استفاده کنید تا مشکلی برایتان پیش نیاید.

خروجی گرفتن از متغیرها

از تابع echo در زبان php معمولا برای نمایش داده ها به صورت مستقیم روی صفحه نمایش استفاده می شود. سه مثال ساده از این تابع را با هم کار می کنیم: اولین مثال نمایش یک رشته ی متنی ساده است:

<!DOCTYPE html>
<html>
<body>

<?php
$txt = "roxo.ir";
echo "I love $txt!";
?>

</body>
</html>

خروجی این کد عبارت "!I love roxo.ir" خواهد بود.

مثال دوم نمایش یک متن از طریق متغیرها است:

<!DOCTYPE html>
<html>
<body>

<?php
$txt = "roxo.ir";
echo "I love " . $txt . "!";
?>

</body>
</html>

خروجی این کد عبارت "!I love roxo.ir" خواهد بود. نقطه هایی که قبل و بعد از متغیر گذاشته شده است، متغیر را به آنچه قبل و بعدش قرار دارد متصل می کند. ما هنوز به توضیحات آن نرسیده ایم بنابراین اگر متوجه نمی شوید جای نگرانی نیست.

مثال سوم نمایش مقدار نهایی پس از جمع دو متغیر است:

<!DOCTYPE html>
<html>
<body>

<?php
$x = 5;
$y = 4;
echo $x + $y;
?>

</body>
</html>

خروجی این کد عدد 9 خواهد بود.

البته این ها تنها مثال هایی برای آشنایی شما با متغیرها بود. در قسمت بعد با دستور echo بیشتر آشنا می شویم.

PHP در دسته ی زبان های Loosely Typed قرار می گیرد

اگر دقت کرده باشید در مثال های بالا هیچ گاه نگفتیم که متغیر ما از چه جنسی است (عدد است، متن است، بولین است و ...). این مسئله بدین خاطر است که زبان php بر اساس مقدار متغیر، به صورت خودکار یک «نوع داده» یا data type را به متغیر منتسب می کند. به همین دلیل می توانیم یک عدد را با یک رشته جمع بزنیم بدون اینکه به خطایی برخورد کنیم!

البته در PHP 7 این نوع داده ها نیز اضافه شده اند و از این پس می توانیم نوع داده را نیز مشخص کنیم؛ مثلا هنگامی که تابعی تعریف می کنیم می توانیم بگوییم ما انتظار یک عدد را داریم و اگر متن وارد شد خطایی از نوع Fatal Error اتفاق می افتد. در این باره بعدا بیشتر صحبت می کنیم.

مفهوم Scope در متغیرها

شما می توانید متغیرها را در هر جایی از کدهایتان که بخواهید تعریف کنید و scope آن متغیر یعنی قسمت هایی از کد که از آنجا متغیر قابل استفاده و دسترسی است. متغیرهای php سه scope مختلف دارند:

  • local
  • global
  • static

1. اگر متغیر شما خارج از توابع تعریف شود، دارای global scope می شود:

<!DOCTYPE html>
<html>
<body>

<?php
$x = 5; // global scope
 
function myTest() {
    // استفاده از متغیر بالا درون این تابع باعث بروز خطا و دیده نشدن اطلاعات می شود
    echo "<p>Variable x inside function is: $x</p>";
} 
myTest();

echo "<p>Variable x outside function is: $x</p>";
?>

</body>
</html>

مشاهده ی خروجی

همانطور که در خروجی می بینید زمانی که متغیر ما دارای scope سراسری (Global) است نمی توانیم از آن داخل توابع استفاده کنیم.

2. اگر متغیر شما درون یک تابع تعریف شده باشد دارای local scope یا scope محلی خواهد بود:

<!DOCTYPE html>
<html>
<body>

<?php
function myTest() {
    $x = 5; // local scope
    echo "<p>Variable x inside function is: $x</p>";
} 
myTest();

// using x outside the function will generate an error
echo "<p>Variable x outside function is: $x</p>";
?>

</body>
</html>

مشاهده ی خروجی

در چنین حالتی نمی توانیم از متغیر خود بیرون از تابع استفاده کنیم. بدین صورت می توانیم از یک نام برای چندین متغیر درون چندین تابع استفاده کنید چرا که متغیرهای درون توابع، scope محلی (local) دارند و محدود به آن تابع هستند.

اگر می خواهید از درون یک تابع به متغیری دسترسی داشته باشید که دارای global scope است باید از کلیدواژه ی global استفاده کنید. تنها کافی است که global را قبل از نام متغیر اضافه کنید:

<!DOCTYPE html>
<html>
<body>

<?php
$x = 5;
$y = 10;

function myTest() {
    global $x, $y;
    $y = $x + $y;
} 

myTest();  // run function
echo $y; // output the new value for variable $y
?>

</body>
</html>

مشاهده ی خروجی

می بینید که این بار به خطا برخورد نکردیم. البته php تمام متغیرهای سراسری را در [GLOBALS[index$ ذخیره می کند (به جای index باید نام متغیر را قرار دهید) بنابراین می توانید از طریق آن حتی از درون توابع به متغیرهای سراسری دسترسی داشته باشید و مقدار آن ها را تغییر دهید.

بنابراین می توانیم مثال بالا را اینطور بنویسیم:

<!DOCTYPE html>
<html>
<body>

<?php
$x = 5;
$y = 10;

function myTest() {
    $GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
} 

myTest();
echo $y;
?>

</body>
</html>

مشاهده ی خروجی

3. در حالت عادی زمانی که تابعی اجرا می شود و کارش را انجام می دهد متغیرهای آن نابود می شوند اما برخی اوقات به این متغیر محلی نیاز داریم و می خواهیم بعدا کارهای دیگری روی آن انجام دهیم. برای جلوگیری از حذف متغیرهای محلی از کلیدواژه ی static استفاده می کنیم:

<!DOCTYPE html>
<html>
<body>

<?php
function myTest() {
    static $x = 0;
    echo $x;
    $x++;
}

myTest();
echo "<br>";
myTest();
echo "<br>";
myTest();
?> 

</body>
</html>

مشاهده ی خروجی

بدین صورت هر زمانی که این متغیر را فراخوانی کنیم هنوز هم اطلاعات خود را به ما می دهد. البته حواستان باشد که متغیر هنوز هم از نوع محلی (local) است.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش PHP 7 توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (1 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

سید محمد
10 دی 1398
سلام و عرض ادب، من از کا بران پرو‌پاقرص آموزش‌های شما هستم. ممنونم بابت مطالب عالیتون! یه غلط املایی هست توی متن! اون‌ جایی که درمورد نام‌گذاری متغیبر‌هاست، در آخر بجای مختلفی نوشتین متخلفی!

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.