آموزش PHP - بخش پنجم: عبارات شرطی، دستور if elseif else

آموزش PHP - بخش پنجم: عبارات شرطی، دستور if elseif else

در این جلسه می‌خواهیم دستورات شرطی if elseif else را به شما آموزش دهیم و یاد بگیریم که چگونه شرایط مختلف را در پروژه‌های خود کنترل کنیم.

فارغ از نوع وب‌ اپلیکیشنی که بخواهیم طراحی کنیم، همواره نیاز به بررسی شروط مختلف در ساختار برنامه نویسی وجود دارد که چنین چیزی در زبان PHP با استفاده از دستوارت elseif ،if و else امکانپذیر می‌شود:

if (First condition) {
    // Do something
} elseif (Second condition) {
    // Do something else
} else {
    // Do something if none of the above is met
}

آنچه در بالا مشاهده می‌شود، ساختار کلی دستورات شرطی در زبان PHP است. در واقع، اگر شرط قرار گرفته داخل پرانترهای مرتبط با if برآورده شود (یا به عبارت دیگر true یا درست باشد)، کدهای قرار گرفته داخل { } اجرا خواهند شد و دستورات elseif و else هرگز اجرا نخواهند شد اما اگر این شرط برآورده نشود، سپس به سراغ شرط قرار گرفته داخل پرانتر elseif می‌رود و اگر این شرط برآورده شد، کدهای قرار گرفته داخل { } اجرا خواهند شد و مفسر هرگز به سراغ دستور else نمی‌رود اما اگر این شرط هم برآورده نشد، در نهایت مفسر هر آنچه که داخل { } مرتبط با else قرار گرفته باشد را اجرا خواهد کرد. توجه داشته باشیم که به هر تعداد elseif که بخواهیم می‌توانیم در بلوک شرطی خود داشته باشیم:

if (First condition) {
    // Do something
} elseif (Second condition) {
    // Do something else
} elseif (Third condition) {
    // Do something else
} elseif (Forth condition) {
    // Do something else
} elseif (Fifth condition) {
    // Do something else
} elseif (Sixth condition) {
    // Do something else
} elseif (Nth condition) {
    // Do something else
} else {
    // Do something if none of the above is met
}

در ارتباط با دستورات شرطی، بایستی این نکته را مد نظر داشته باشیم که دستورات elseif و else دلخواه بوده و می‌توانیم هرگز از آنها استفاده نکنیم. به عبارت دیگر داریم:

if (Condition) {
    // Do something
}

در واقع، در اسکریپت نوشته شده چک می‌کنیم ببینیم که آیا Condition (شرط) برابر با true است یا خیر؛ اگر true باشد، دستورات داخل { } اجرا خواهند شد و در غیر این صورت، هیچ اتفاق دیگری رخ نخواهد داد.

if (Condition)
    // Do something

در چه شرایطی دستورات مرتبط با if اجرا خواهند شد؟
به طور کلی،‌ چنانچه نتیجه یک Condition (شرط) اصطلاحا true باشد، دستورات مرتبط با if اجرا خواهند شد. به طور مثال داریم:

<?php
$condition = '';
if ($condition) {
    echo "The condition is met";
} else {
    echo "The condition is not met";
}

مقدار متغیر condition$ را برابر با یک عبارت String خالی قرار داده‌ایم. حال اگر اسکریپت فوق را اجرا کنیم، از آنجا که از دید مفسر PHP عبارت خالی برابر با false است، دستور داخل else اجرا خواهد شد. به عنوان مثالی دیگر داریم:

<?php
$condition = 0;
if ($condition) {
    echo "The condition is met";
} else {
    echo "The condition is not met";
}

کماکان مقدار 0 هم برابر با false است و دستور داخل else اجرا خواهد شد. به عنوان مثالی دیگر داریم:

<?php
$condition = false;
if ($condition) {
    echo "The condition is met";
} else {
    echo "The condition is not met";
}

مقدار false که برای متغیر condition$ در نظر گرفته شده است هم کاملا مشخص است که نیاز if را برآورده نمی‌سازد. به عنوان مثالی دیگر داریم:

<?php
$condition = null;
if ($condition) {
    echo "The condition is met";
} else {
    echo "The condition is not met";
}

پیش از این گفتیم که NULL یکی از انواع دیتاتایپ‌ها در زبان PHP است و این دیتاتایپ هم رفتاری همچون false دارد و نمی‌تواند نیاز دستور شرطی if را برآورده سازد. حال اگر مقادیری همچون موارد زیر را در نظر بگیریم، به سادگی خواهیم توانست وارد دستور شرطی if شویم:

<?php
$condition = true;
/*
Or alternatively
$condition = 1; or
$condition = "This is set";
*/
if ($condition) {
    echo "The condition is met";
} else {
    echo "The condition is not met";
}

نتیجه خروجی اسکریپت فوق را داریم:

The condition is met

در واقع، اگر به جای مقدار true برای متغیر condition$ از مقادیری همچون 1 و یا استرینگ This is set استفاده کنیم، همواره شرط if برابر با true بوده و دستورات داخل علائم { } مرتبط با if اجرا خواهند شد (لازم به ذکر است که 1 نمود عددی مقدار true و 0 نمود عددی مقدار false است).

کاربرد تایع ()isset در کنار دستورات شرطی
قصد داریم با تایع ()isset آشنا بشیم. این function کاری که انجام می‌دهد این است که چک می‌کند آیا یک متغیر مقداری به غیر از NULL دارد یا خیر؛ اگر این‌گونه بود، مقدار true را بازمی‌گرداند و اگر هم NULL بود مقدار false را باز خواهد گرداند. به عنوان مثال داریم:

<?php
$condition = 0;
if (isset($condition)) {
    echo "The condition is met";
} else {
    echo "The condition is not met";
}

اگر اسکریپت فوق را اجرا کنیم‌، می‌بینیم که دستور مرتبط با if اجرا می‌گردد بدان معنی که خروجی تابع ()isset برابر با true است و این در حالی است که اگر خود متغیر condition$ را به عنوان پارامتر ورودی به دستور if پاس دهیم، از دید مفسر PHP هرگز true نیست!

به عبارت دیگر، مقادیر false ،0 و string خالی که پیش از این چک کردیم که حاوی مقدار false بودند، اگر با استفاده از تابع ()isset به کار گرفته شوند، مقدار true بازگردانده خواهد شد و تنها چیزی که مقدار false را باز خواهد گرداند، دیتاتایپ NULL است. به عنوان مثال داریم:

<?php
$condition;
if (isset($condition)) {
    echo "The condition is met";
} else {
    echo "The condition is not met";
}

باتوجه به این که متغیر condition$ تعریف شده ولی مقداردهی نشده است (یا به عبارت دیگر Set نشده است)، خروجی فانکشن ()isset برابر با false بود، فلذا دستور داخل else اجرا خواهد شد.

استفاده از اپراتورهای منطقی و مقایسه‌ای در دستورات شرطی
پیش از این با اپراتورهای منطقی و مقایسه‌ای در زبان PHP آشنا شدیم و این در حالی است که به سادگی می‌توان از این اپراتورها در دستورات شرطی if استفاده کرد:

اپراتور توضیحات
== برابری را نشان می‌دهد.
=== برابری و دیتاتایپ یکسان را نشان می‌دهد.
=! یا <> نابرابری را نشان می‌دهد.
==! نابرابری و عدم برخورداری از دیتاتایپ یکسان را نشان می‌دهد.
< بزرگ‌تر بودن را نشان می‌دهد.
> کوچک‌تر بودن را نشان می‌دهد.
=< بزرگ‌تر یا مساوی را نشان می‌دهد.
=> کوچک‌تر یا مساوی را نشان می‌دهد.
and یا && این اپراتور به معنی «و» است و چنانچه دو طرف آن true باشد، مقدار true بازگردانده خواهد شد.
or یا || این اپراتور به معنی «یا» است و چنانچه یکی از عملوندهای راست یا چپ این اپراتور true باشد، مقدار true بازگردانده خواهد شد.
xor یا ^ در صورتی که یکی از عملوندها true باشد (نه هر دوی آنها)، این اپراتور مقدار true را باز خواهد گرداند.
! این اپراتور مقدار true را باز خواهد گرداند چنانچه عملوند قرار گرفته پس از آن true نباشد!

به عنوان مثالی دیگر، می‌توان نحوه به‌کارگیری اپراتور || به معنی «یا» را مورد بررسی قرار دهیم:

<?php
$experience = 4;
$levelOfProficiency = 'senior';
$age = 27;

if (($experience > 5 || $levelOfProficiency == 'senior') && ($age > 20 && $age < 35)) {
    echo "You might be a developer with a high salary.";
} else {
    echo "Although you can find a job, you don`t have to expect a high salary.";
}

همان‌طور که ملاحظه می‌شود، سه متغیر تعریف کرده‌ایم تحت عناوین levelOfProfiency ،$experience$  و age$ که به ترتیب به معانی «تجربه»، «سطح مهارت» و «سن» هستند. دستور شرطی استفاده شده در کد فوق کمی پیچیده به نظر می‌رسد اما گاهی‌اوقات نیاز به استفاده از ساختارهایی این‌چنین داریم.

در واقع، در دستور if دو شرط مختلف را سنجیده‌ایم اما برای اینکه خوانایی سورس‌کد بالا رود، آنها را داخل پرانتزهایی جداگانه‌ای قرار داده و مابین هر دو جفت پرانتز هم از علامت && استفاده کرده‌ایم بدین معنا که هر دو شرط بایستی true باشند.

در پرانتز اول، گفته‌ایم که میزان تجربه دولوپر باید بیش از 5 سال باشد یا سطح مهارت ایشان برابر با senior (ارشد) باشد. در پرانتز دوم هم گفته‌ایم که سن دولوپر بایستی بزرگ‌تر از 20 و کوچک‌تر از 35 سال باشد. حال اسکریپت فوق را اجرا می‌کنیم:

You might be a developer with a high salary.

می‌بینیم که کلیه شروط true هستند، لذا دستور داخل بلوک if اجرا می‌شود و این در حالی است که مثلا اگر سن دولوپر فرضی را 20 در نظر بگیریم، شروط برآورده نشده و دستور داخل بلوک else اجرا می‌گردد:

<?php
$experience = 4;
$levelOfProficiency = 'senior';
$age = 20;

if (($experience > 5 || $levelOfProficiency == 'senior') && ($age > 20 && $age < 35)) {
    echo "You might be a developer with a high salary.";
} else {
    echo "Although you can find a job, you don`t have to expect a high salary.";
}

به عنوان خروجی داریم:

Although you can find a job, you don`t have to expect a high salary.

واقعیت امر آن است که در دستور شرطی خود در پرانتز دوم گفته‌ایم که حداقل سن بایستی بیش از 20 سال باشد و از آنجا که سن این دولوپر فرضی برابر با 20 است، شراط برآورده نشده و در نتیجه وارد بلوک else می‌شویم.

آشنایی با اپراتور ? به جای دستورات if else در PHP
اپراتور ? که تحت عنوان Ternary Operator شناخته می‌شود و از این اپراتور به منظور خلاصه‌نویسی دستورات شرطی if else استفاده می‌شود. برای مثال داریم:

<?php
$experience = 2;
$levelOfProficiency = 'senior';
$hasHighSalary = null;
$hasHighSalary = ($experience >= 4 && $levelOfProficiency == 'senior') ? true : false;
var_dump($hasHighSalary);

به عنوان خروجی اسکریپت فوق داریم:

bool(false)

در واقع، متغیری تعریف کرده‌ایم تحت عنوان hasHighSalary$ (دارای حقوق بالا) که مقدار پیش‌فرض آن را برابر با null قرار داده‌ایم که یکی از دیتاتایپ‌های زبان PHP است. سپس در خط بعد مقدار این متغیر را برابر با یک دستور شرطی با استفاده از اپراتور ? قرار داده‌ایم بدین صورت که گفته‌ایم اگر تجربه دولوپر بزرگ‌تر یا مساوی با 4 سال بود و سطح مهارت وی senior (ارشد) بود، مقدار بولینی true برای این متغیر در نظر گرفته شود و در غیر این صورت، مقدار false اختصاص یابد و از آنجا که تجربه این دولوپر فرضی برابر با 2 سال است، می‌بینیم که به درستی مقدار false برای این متغیر در نظر گرفته شده است.

خدمت دوستان عزیز عرض کنم در این جلسه سعی کردیم با اصطلاحات مرسوم در زبان PHP آشنا بشیم. اگر موارد گفته شده برای شما نامفهموم بود سعی کنید دوباره مطلب فوق را ار ابتدا مرور کنید.

مطالب مشابه