شنبه ۲۲ شهریور ۱۴۰۴

Saturday, September 13, 2025 GMT +3:30

دستورات شرطی (Conditional Statements) در PHP

php-else-if

دستورات شرطی (Conditional Statments) یکی از پرکاربردترین مفاهیم در دنیای زبان های برنامه نویسی و از جمله در برنامه نویسی وب و PHP به شمار می روند، در یک تعریف ساده با این دستورات برقرار یا برقرار نبودن شرطی را در یک مقایسه بررسی می کنیم و بر اساس مثبت (true) یا منفی (false) بودن پاسخ، مطابق با خواست و نیازمان در دو راهی های برنامه ها تصمیم گرفته و فرآیندی را انجام می دهیم، به طور مثال در دنیای واقعی می گوییم اگر تمرین کافی داشته باشیم موفق می شویم و در غیر اینصورت شکست خواهیم خورد یا اگر هوا کاملا صاف و آفتابی باشد به کوهنوردی می رویم در غیر اینصورت اگر هوا بارانی نبود به جنگل خواهیم رفت و در غیر اینصورت در خانه خواهیم ماند!، البته تطبیق دقیق دستورات برنامه نویسی با رویدادهای دنیای واقعی خالی از اشکال نیست اما برای شروع بد نیست بدانیم که مشابه این نوع ارزیابی ها در برنامه نویسی وب و به طور خاص در PHP با دستورات شرطی شامل if، else و elseif صورت می گیرد.

دستور شرطی if در PHP


نخستین عبارت کلیدی که در دستورات شرطی استفاده می شود "اگر" است که در برنامه نویسی به صورت "if" به کار می رود، با دستور if درستی یا نادرستی پاسخ ارزیابی شرطی را در مقایسه بررسی می کنیم، به طور مثال اگر متغیری با نام status برای تعیین وضعیت ثبت نام کاربران داشته باشیم و بخواهیم بررسی کنیم که آیا متغیر status برابر 1 است یا خیر، به صورت ساده می نویسیم: اگر (if) متغیر status برابر با 1 باشد (رابطه true باشد) دستورات بین {} را اجرا کن:
<?php
$status = 1;
if($status == 1) {
    echo "کاربر گرامی شما در سایت ثبت نام کرده اید!";
}
?>
بر اساس مثال بالا مقدار پیش فرض متغیر status برابر 1 تعریف شده و بررسی رابطه  if درست (true) خواهد بود در نتیجه دستورات بین علامت های {} اجرا خواهند شد، اما در مثال زیر بررسی رابطه if مقادیر نادرست (false) خواهد داشت، چرا که وضعیت ثبت نام کاربر 1 است اما در ارزیابی گفته ایم که اگر وضعیت او 1 نبود دستورات را انجام بدهد.
<?php
$status = 1;
if($status != 1) {
    echo "کاربر گرامی شما هنوز در سایت ثبت نام نکرده اید!";
}
?>
همانطور که در بحث عملگرها (Operators) در PHP گفتیم، عملگر == یعنی دو طرف رابطه برابر باشند و عملگر =! یعنی دو طرف رابطه برابر نباشند، در نمونه کد بالا دستورات بین علامت های {} اجرا نخواهند شد چرا که شرط آن برقرار نیست (متغیر status برابر 1 است و مقایسه نابرابر بودن آن false خواهد بود).

دستور شرطی else در PHP


شاید از خود بپرسیم اگر شرط if درست (true) نشد آنوقت تکلیف چیست؟! برنامه نویس خوب باید حساب همه چیز را کرده باشد و این چیزی است که شکل پیشرفته آن را هوش مصنوعی می نامند، پس باید شرایط بعد از برقرار نبودن رابطه if را هم تعریف کنیم، برای این کار از دستور شرطی else به معنی "در غیر اینصورت" استفاده می کنیم.
else در واقع جایگزینی برای if است یعنی اگر رابطه if درست نباشد (false باشد)، آنگاه مقادیر بین علامت های {} در else اجرا می شود، مثال زیر گویا است.
<?php
$status = 1;
if($status == 0) {
    echo "کاربر گرامی شما هنوز در سایت ثبت نام نکرده اید!";
} else{
    echo "کاربر گرامی شما در سایت ثبت نام کرده اید!";    
}
?>
نمونه کد بالا به صورت ساده اینطور تفسیر می شود:
متغیر status در خط اول برابر 1 تعریف شده است، آنگاه در دستور if برابر بودن status با 0 بررسی می شود، اگر رابطه درست باشد (یعنی کاربر هنوز در سایت ثبت نام نکرده باشد)، مقادیر بین {} در بررسی if اجرا می شود و نوبت به else نمی رسد، اما اگر کاربر قبلا در سایت ثبت نام کرده باشد، ارزیابی رابطه if اول صحیح نیست (چون رابطه می گوید اگر status برابر 0 باشد در حالی که مقدار پیش فرض status را برابر 1 تنظیم کرده ایم) در نتیجه نوبت اجرای دستور else است که پیام "کاربر گرامی شما در سایت ثبت نام کرده اید!" را نمایش می دهد.
مثالی دیگر:
<?php
$country = "ایران";
$state = "شمال";
if($country != '' && $state != ''){
    echo "کاربر گرامی شما از کشور $country و منطقه $state هستید.";
} else{
    echo "کاربر گرامی لطفا نام کشور و منطقه را انتخاب نمائید!";
}
?>
نتیجه اجرای نمونه کد بالا به شکل زیر خواهد بود:
کاربر گرامی شما از کشور ایران و منطقه شمال هستید.
برای بررسی بیشتر کافی است کد بالا را در لوکال هاست یا سرور در یک فایل PHP درج کرده و در مرورگر فراخوانی و اجرا کنیم تا نتیجه کار را ببینیم.

دستور شرطی elseif در PHP


دستور elseif به معنی "در غیر اینصورت اگر" مرحله ای مابین دستور if و else است، به فرض اگر بخواهیم قبل از خاتمه دادن به شرط if با دستور else، چند ارزیابی دیگر را نیز انجام دهیم از elseif استفاده می کنیم، هر شرط elseif با نادرست شدن ارزیابی شرط if (یا elseif) قبل از خود بررسی می شود، اگر نتیجه بررسی شرط elseif نادرست و false شود قاعدتا مفسر PHP از آن عبور کرده و ادامه کدها پردازش می شوند، به طور مثال:
<?php
$num = 1000;
$max = 2000;
if($num > $max) {
    echo "متغیر num از max بزرگتر است!";
} elseif($num == $max) {
    echo "متغیر num با max برابر است!";
} else{
    echo "متغیر num از max کوچکتر است!";
}
?>
خروجی:
متغیر num از max کوچکتر است!
در نمونه کد بالا بر اساس متغیرهای تعریف شده نتیجه ارزیابی دستورات if و elseif نادرست خواهد بود و در نتیجه بخش سوم یعنی else اجرا می شود، در مثال زیر کد را به نحوی تغییر داده ایم تا قسمت دوم یعنی elseif اجرا شود:
<?php
$num = 2000;
$max = 2000;
if($num > $max) {
    echo "متغیر num از max بزرگتر است!";
} elseif($num == $max) {
    echo "متغیر num با max برابر است!";
} else{
    echo "متغیر num از max کوچکتر است!";
}
?>
خروجی:
متغیر num با max برابر است!
نکته مهم اینکه از دستور elseif می توانیم به هر تعداد که بخواهیم مابین if و else استفاده کنیم، مفسر PHP به ترتیب از بالا به پائین مورد به مورد برقرار بودن رابطه آنها را بررسی کرده و اگر یکی از ارزیابی ها درست (true) باشد مقادیر داخل علامت های {} اجرا شده و سلسله دستورات شرطی در همان نقطه خاتمه پیدا می کند.
<?php
$a = true;
$b = false;
$c = null;
if($a == false) {
    echo '$a == false';
} elseif($b == true){
    echo '$b == true';
} elseif($c != null){
    echo '$c != null';
} elseif($a == false || $b == false){
    echo '$a == false || $b == false';
} else{
    echo 'else{}';
}
?>
قاعدتا با توضیحات ارائه شده حدس نتیجه اجرای این کد چندان سخت نیست و آخرین elseif اجرا خواهد شد چرا که متغییر b برابر false مقداردهی شده است (در غیر اینصورت اگر متغیر a برابر با true یا متغیر b برابر با false باشد).

مختصرنویسی با عملگرهای سه گانه (Ternary Operators) در PHP


در برنامه نویسی پروژه های کاربردی به دلایل مختلف ممکن است نیاز به مختصرنویسی دستورات شرطی elseif ،if و else باشد که در پاسخ به این نیاز در اغلب زبان ها این هدف با عملگرهای سه گانه یا Ternary Operators تحقق می یابد، منظور از عملگرهای سه گانه ترکیب مقایسه با کاراکترهای ? و : است، در شیوه مختصرنویسی علامت ? جایگزین if و علامت : جایگزین else می شود، به طور مثال اگر دستور شرطی در حالت عادی به شکل زیر باشد:
<?php
$point = 14;
$num = 12;
if($point < $num) {
    echo 'if';
} else{
    echo 'else';
}
?>
شیوه مختصرنویسی آن به صورت زیر خواهد بود:
<?php
$point = 14;
$num = 12;
echo ($point < $num) ? 'if' : 'else';
?>
با ترکیب و توسعه این روش حتی می توانیم دستور شرطی else if را نیز به صورت مختصرنویسی بنویسیم، به طور مثال:
<?php
$point = 14;
$num = 14;
echo ($point < $num) ? 'if' : ($point <= $num) ? 'elseif' : 'else';
?>
استفاده از شیوه مختصر نویسی در برنامه نویسی دلخواه است و معمولا برای نوشتن شرط های ساده از آن استفاده می کنیم.
نکته: مختصر نویسی در زبان جاوا اسکریپت با برنامه نویسی PHP از لحاظ Syntax اندکی متفاوت است.
در جاوا اسکریپت:
(point < num) ? alert('if') : (point <= num) ? alert('else if') : alert('else');
در PHP:
echo ($point < $num) ? 'if' : ($point <= $num) ? 'elseif' : 'else';
دسته بندی: آموزش مقدماتی » PHP
related مطالب بیشتر:
توابع کار با آرایه در PHP - بخش اول
تعریف و استفاده از متغیر (Variable) در PHP
آرایه (Array) در برنامه نویسی PHP
آموزش برنامه نویسی وب با PHP
توابع کار با آرایه در PHP - بخش دوم
دیدگاه
more ۷۸ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
samira
۰۰:۵۸ ۱۳۹۲/۰۵/۱۹
با سلام و خسته نباشید من یه فرم ساختم که می خوام اگه کاربر ثبت نام کرده باشه خوش آمد گویی کنه در غیر این صورت به فرم قبلی برگرده میشه کمکم کنید؟ خواهشا یه کم زودتر مرسی
لطفا از طرح سوالات کلی خودداری کنید!
برای این کار باید با مبحث سشن ها و همچنین کار با MySQL آشنا باشید، دقیقا مشکل شما در کدام قسمت است؟ نمونه کد؟
۱۷:۰۶ ۱۳۹۲/۰۵/۱۷
سلام
خیلی ممنون اگه زیادی توضیح دادم شرمنده خیلی کمک کردین
۰۴:۴۰ ۱۳۹۲/۰۵/۱۷
این کد را ببینید و تمام توضیحاتش رو بخونید یه خواهشی داشتم تو کد معلومه ممنون میشم ویرایش کنی واقعا دمتون گرم
<?php
$name1 = 55;
$name2 = 2;
$name3 = 5;
$name4 = 3;
$name5 = 500;
$name6 = 600;
//شرط اول: اگر نام 1 کوچکتر از نام 2 بود شرط دوم را اجرا کن | شرط اول درست نیست
if($name1 < $name2) {
//شرط دوم: اگر نام 3 بزرگتر از نام 4 بود متن زیر را چاپ کن که شرط دوم درست است ولی شرط اول درست نیست
if($name3 > $name4) {
echo 'نام 3 بزرگتر از نام 4 است';
}
//اگر شرط دوم درست نبود متن زیر را چاپ کن البته شرط دوم درست است ولی شرط اول درست نیست پس چاپ نمیشه اگر شرط اول هم درست بود چاپ میشد
else echo 'نام 3 بزرگتر از نام 4 نیست';
}
//در غیر این صورت اگر شرط اول و دوم درست نبود شرط سوم: اگر نام 5 کوچکتر از نام 6 بود متن زیر را چاپ کن که شرط سوم درست است پس چاپ میشه
else {
if($name5 < $name6) {
echo 'نام 5 کوچک تر از نام 6 است';
}
}
?>
حالا می خوام بدونم اگر شرط سوم هم درست نبود آن وقت موضوع چیست؟ هیچ متنی چاپ نمی شود لطفا خودتون یه شرط دیگه هم اضافه کنید که اگر شرط سوم درست نبود چاپ کنه "هیچ یک از شرط ها درست نیست" ممنون
می توانستید با ادامه دادن همین روند به راحتی شرط مورد نظر را ایجاد کنید، پاسخ سوالتان خیلی پیچیده به نظر نمی رسد:
else {
if($name5 < $name6) {
echo 'نام 5 کوچک تر از نام 6 است';
}
else echo 'هیچ شرطی درست نیست!';
}
۱۷:۳۲ ۱۳۹۲/۰۵/۱۵
خیلی کمکم کردین ممنون از آموزش های خوبتون
من با خودم گفتم پی اچ پی رو من نمیتونم یاد بگیرم گفتم یه بار بخونم ببینم چی میشه شما هم که خیلی واضع توضیح میدین و زود درک کننده هست خیلی ممنون امیدوارم همیشه موفق باشی عزیز به درود
۱۷:۰۳ ۱۳۹۲/۰۵/۱۵
خیلی ممنون از لطف شما
۰۹:۳۹ ۱۳۹۲/۰۵/۱۵
سلام عزیز من تازه تو کار پی اچ پی رفتم یه فرم ساختم می خوام وقتی توش تایپ کنی amir پایینش امیر خوش آمدید رو نمایش بده ولی جز amir تایپ کنی هیچی نیست رو پایینش نمایش بده ببینید کجا اشتباه کردم؟
<form action="" method="post">
<input name="amir" type="text" />
<?php
if ($name == amir) {
echo "امیر خوش آمدید";
}
else "هیچی نیست";
?>
<input type="submit" />
</form>
اصلاح شده کد شما:
<form action="" method="post">
<input name="user_name" type="text" />
<?php
//دریافت مقادیر از فیلد فرم
@$name = $_POST['user_name'];
if ($name == 'amir'){
echo "امیر خوش آمدید";
}
else{
echo "هیچی نیست";
}
?>
<input type="submit" value="ارسال" />
</form>
۰۵:۱۴ ۱۳۹۲/۰۴/۱۴
این کاری که گفتید انجام میدم اما نمیشه. اگه یه راه دیگه هست بهم بگید.
ممنون خدا خیرتون بده.
راه گفته شده اشتباه نیست! باید ببینید کجای کار را اشتباه انجام می دهید، در صورت تمایل فایل را با ذکر جزئیات به آدرس ایمیل ما ارسال کنید تا بررسی گردد.
۰۸:۱۱ ۱۳۹۲/۰۴/۱۲
با سلام من میخوام در php اگر متغیر
$qwe 
برابر با 2 شد.
در صفحه html که درست کردم یک عکس و اگر 1 شد عکس دیگری قرار بگیرد. باید چیکار کنم؟ اصل سوالم این جاست چطوری میتونم در شرطی که در php استفاده کردم رو بیارم؟ خیلی ممنون.
اگر سوالم به موضوع مربوط نمیشه و حذف یا انتقال پیدا کرد حتما از طریق ایمیل بهم اطلاع بدید.
این کار را به چند روش می توان انجام داد، به طور مثال اگر متغیر مورد نظر مقادیر 1 بود، نام تصویر را در یک متغیر دیگر مقدار دهی می کنیم:
<?php
$qwe = 1;
$image = NULL;
if($qwe == 1){
$image = 'your-image-1.jpg';
}
elseif($qwe == 2){
$image = 'your-image-2.jpg';
}
?>
<img src="img/<?php echo $image ?>" alt="img">
مسلم است که فرمت فایل شما باید PHP باشد تا کدها قابل اجرا باشند.
مهدی
۲۳:۰۶ ۱۳۹۲/۰۴/۰۳
با سلام
آیا میشه در دستورات if تو در تو استفاده کرد؟ یعنی شرط if خودش if باشه؟
یه چیزی مثل این:
<?
if(if($age = '20'){$age == '20';}else{$age == '10';}){
echo $age;
}
?>
به این صورت خیر! کد شما خطای syntax دارد! اما به طور مثال به روش زیر می شود:
<?php
if(!empty($age)){
if($age == '20'){
$age = '20';
}
else{
$age = '10';
}
echo $age;
}
?>
elena
۰۲:۳۹ ۱۳۹۲/۰۴/۰۱
سلام، می خوام یه برنامه بنویسم که نام کاربری و رمز عبور دریافت کنه بعد یه برنامه دیگه میخوام که وقتی فرم عضویت کامل پر شد پیغام خوش آمد بده و در غیر اینصورت error بده
خواهشا سریع تر کمکم کنید
مرسی
لطفا از طرح سوالات و مشکلات به صورت کلی اجتناب کنید! نوشتن یک برنامه نیاز به دانستن مقدماتی دارد، مشخص نیست تا چه میزان با مقدمات کار آشنا هستید و خودتان تا چه مقدار از برنامه را نوشته اید؟!
محمد مهدی
۲۱:۳۹ ۱۳۹۲/۰۲/۲۷
سلام if های تو در تو که باید بیش از چندین بررسی انجام شود چگونه است؟
یعنی اخرین else نباید if داشته باشد درسته؟
<?php
$num = 2000;
if ($num > $max)
{
echo "1";
}
elseif($num == $max)
{
echo "2";
}
elseif($num == $max)
{
echo "3";
}
elseif($num == $max)
{
echo "4";
}
else
{
echo "5";
}
?>
برای درک نحوه به کار بردن صحیح if و elseif کافی است به معنی آنها توجه کنیم:
if = اگر
elseif = در غیر این صورت اگر
else = در غیر این صورت
با این حساب:
اگر (num بزرگتر از max باشد){
چاپ عدد 1
}
در غیر این صورت اگر(num کوچکتر از max باشد){
چاپ عدد 2
}
در غیر این صورت{
چاپ عدد 3 //num با max مساوی است
}
و همین تئوری در عمل:
if($num > $max){
echo 1;
}
elseif($num < $max){
echo 2;
}
else{
echo 3;
}
در ضمن نباید از دستورات شرطی elseif به تعداد بیشتر از یک اما با شرط یکسان استفاده کنید، یعنی این حالت اشتباه است:
elseif($num == $max)
{
echo "2";
}
elseif($num == $max)
{
echo "3";
}
elseif($num == $max)
{
echo "4";
}
چون با اجرای اولین شرط نوبت به موارد بعدی نمی رسد و با عدم اجرای شرط، چون شرط ها بین همه دستورات مشترک هستند، هیچ کدام اجرا نمی شوند! و دستور else اجرا می شود، دستورات elseif متعدد زمانی کاربرد دارند که شرط آنها یکسان نباشد.
roya
۱۳:۲۹ ۱۳۹۲/۰۱/۲۸
سلام برنامه ای پسورد بگیره بعد داخل همین برنامه بتونیم پسورد رو عوض کنیم از ساده ترین راه حل میخوام نمیدونم چه طوری مرسی اگه میشه کمکم کن
سوالتان واضح و منظورتان مشخص نیست، اگر منظور این است که سیستم تعویض پسورد بسازید، باید با PHP و MySQL آشنا باشید، سپس در برنامه خود و در یک فرم HTML سه فیلد پسورد فعلی، پسورد جدید و تکرار پسورد جدید را بسازید، هنگام ارسال اطلاعات این فرم، ابتدا صحیح بودن پسورد فعلی را (با تطبیق آن با دیتابیس) بررسی کنید، سپس برابری پسورد جدید با تکرار آن را چک کنید و در نهایت مقادیر جدید را در دیتابیس جایگزین نمائید.
البته ملاحظه می کنید که تمام این مراحل را باید کدنویسی کنید، کدی آماده برای آن در اختیار نداریم.
مهدی
۱۸:۱۹ ۱۳۹۲/۰۱/۰۳
مرسی خیلی به درد بخور بود
مهدی
۱۶:۵۷ ۱۳۹۲/۰۱/۰۳
میخواهم شرط به این گونه باشد که اگر
$carac<0 و $number>=$ab271[1]
هر دو همزمان برقرار باشند شرط اجرا شود ولی اگر حتی یکی هم برقرار نبود اجرا نشود
<?php
if($carac < 0 && $number >= $ab271[1]){
echo 'true!';
}
else{
echo 'false';
}
?>
مهدی
۱۶:۲۶ ۱۳۹۲/۰۱/۰۳
با سلام
چگونه میشود دو شرط برسسی شود و اگر دو شرط هم تایید شد ادامه یابد (else)
منظور سوالتان دقیقا مشخص نیست، اما به نظر می رسد می خواهید دو پارامتر را در یک شرط if بررسی کنید، برای این کار کافی است از علائمی مانند && (یا ||) استفاده کنید، به طور مثال در کد زیر اگر متغیر فرضی a و b هر دو برابر با true باشند، کد داخل {} در دستور شرطی if اجرا می شود، در غیر این صورت کد قسمت elseif یا else اجرا می شود:
<?php
$a = true;
$b = false;
if($a == true && $b == true){
echo 'a & b = true!';
}
elseif($a == true){
echo 'a = true!';
}
elseif($b == true){
echo 'b = true!';
}
else{
echo 'a & b = false!';
}
?>
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
9 × 7
20 × 20
=