شرطها در زبانهای برنامه نویسی به ما اجازه تصمیمگیری میدهند. با ساختار شرط در PHP میتوانیم بر اساس موقعیت یا شرایط دلخواه، کار خاصی انجام دهیم. در این آموزش به آموزش شرطها در پیاچپی پرداخته و با ۴ ساختار و ۲ نوع if در PHP آشنا خواهیم شد.
عبارات شرطی (Conditional statements) برای انجام کارها طبق شرایط خاص استفاده میشوند. همه زبانهای برنامهنویسی کاربردی و موفق ساختار شرطی را در نحو (syntax) خود پیادهسازی کردهاند.
در زبان PHP از کلمه کلیدی if برای شروع شرط استفاده میشود. این کلمه در انگلیسی به معنای «اگر» است.
- اگر امروز دوشنبه بود، پیغام تبریک نمایش بده!
- در صورتی که کاربر عدد 23 را وارد کرد، به او اجازه نمایش محتوای سایت را بده!
- اگر نام کاربری و رمز عبور صحیح بود، کاربر را وارد سیستم کن!
تمام اینها شرطهای سادهای هستند که با اولین ساختاری که در ادامه یاد بگیریم میتوانیم آن را بنویسیم.
فهرست محتوای آموزش
شرطها در PHP
به مثالهای بالا توجه کنید. این شرطها از دو بخش اصلی تشکیل شدهاند:
- عبارت شرط
- بدنه شرط
عبارت شرط (statement) همان بخشی است که پس از کلمه «اگر» آورده میشود. با برقرار بودن این شرط، بدنه آن اجرا میشود.
سادهترین ساختار شرطی در PHP همین است!
شرطهای PHP به چهار نوع تقسیمبندی میشوند:
- ساختار if
- کلمه کلیدی else
- ساختار elseif
- ساختار switch
در ادامه این چهار مورد را با مثال بررسی میکنیم.
قبل از آن بهتر است نگاهی به دیاگرام شرط در زبانهای برنامهنویسی هم بیندازید تا درک چگونگی اجرای کدهای بعدی برایتان سادهتر شود.
ساختار شرط PHP
یک شرط ساده در PHP به صورت زیر تعریف میشود:
if (condition) {
#code if condition is true;
}
منظور از condition همان شرط مورد نظر ماست. این شرط باید مقداری منطقی (Boolean) به صورت true یا false بازگرداند.
محدوده کدهای مرتبط با if درون علامت {
و }
قرار میگیرد. به این علامتها Curly Bracket گفته میشود. (معادل فارسی آن کمانک است که تقریباً استفاده نمیشود!)
فرض کنید متغیری به نام $score
داریم. میخواهیم اگر نمره کاربر بیشتر از 10 بود، به او پیام تبریک قبولی بدهیم.
<?php
$score = 14;
if ($score > 10) {
echo "You Pass the Exam!";
}
?>
به همین سادگی!
درون محدوده شرطی میتوانیم از شرطهای پیچیدهتری هم استفاده کنیم. برای تعریف چند شرط، از عملگرهای منطقی (and و or و not) استفاده میشود. (ببینید: انواع عملگر در PHP)
مثلاً دو متغیر x
و y
داریم. به کمک شرط زیر، اگر x بزرگتر از 50 و y کوچکتر از 100 بود، آنها را در هم ضرب کرده و چاپ میکنیم. سپس مقدار دو متغیر را برابر صفر تعریف خواهیم کرد.
<?php
if ($x > 50 and $y < 100) {
echo x*y;
$x = 0;
$y = 0;
}
اگر کد درون محدوده شرط فقط یک خط بود، میتوانیم از گذاشتن علامتهای }
و {
صرفنظر کنیم. اما پیشنهاد میشود برای خوانایی بهتر همیشه با این علامتها محدوده کدهای خود را مشخص کنید.
شرط پیچیده با else در PHP
به حرفهای شرطی که در زندگی روزمره میزنیم توجه کنید:
اگر نمرهام بیشتر از 18 شد، بستنی میخوریم در غیر اینصورت فقط شیرینی میدهم!
صرفنظر از اینگونه صحبتها که هیچ وقت شیرینی کذایی را نمیخوریم 🙂 ؛ این شرطها از سه بخش تشکیل شدهاند.
بخش اول آن که شبیه ساختار عادی if در PHP است. اما قسمت «در غیر اینصورت» به آن اضافه شده است.
به ساختار زیر دقت کنید:
if (condition) {
#if-code
} else {
#else-code
}
در این ساختار، اگر شرط condition برقرار (معادل true) بود، قطعه کد if-code
اجرا میشود. اگر شرط برقرار نبود، قسمت else-code
اجرا خواهد شد.
در اولین مثال، فرض کنید میخواهیم در صورتی که دانشجو نمره لازم را کسب نکرده بود، به او پیغام تلاش دوباره در آزمون را نشان بدهیم. برای این کار، قطعه کد زیر را خواهیم داشت:
<?php
# calculate $score
if ($score > 10) {
echo "You Pass the Exam!";
} else {
echo "You have to Try Again!";
}
ساختار شرطی elseif در PHP
بیایید کمی با ساختارهای حرفهای در شرطهای PHP کار کنیم.
برای تعریف شرط «اگر ….. آنگاه ….. در غیر اینصورت اگر ….. آنگاه ….. وگرنه ….. » از کلمه کلیدی elseif کمک میگیریم.
if (condition1) {
#code-1
} elseif (condition2) {
#code-2
} else {
#code-3
}
اگر شرط اول برقرار نبود، شرط دوم بررسی میشود؛ اگر آن هم برقرار نبود، کد سوم که مربوط به بخش else آخری است اجرا خواهد شد.
فرض کنید میخواهیم در اسکریپت PHP خود به کاربر «وقت بخیر» بگوییم! برای این که کمی هوشمندتر کار کنیم، میخواهیم بر اساس شرطهای زیر عمل کنیم:
- اگر صبح بود (قبل از ساعت 11) به او صبح بخیر بگوییم.
- اگر ظهر بود (بین 11 تا 20) به او روز بخیر بگوییم.
- در غیر اینصورت به او شب بخیر بگوییم.
برای این کار از تابع date()
استفاده میکنیم. جهت آشنایی بیشتر با این تابع میتوانید آموزش کار با زمان در PHP را ببینید.
<?php
$t = date("H");
if ($t < "11") {
echo "Have a good morning!";
} elseif ($t < "20") {
echo "Have a good day!";
} else {
echo "Have a good night!";
}
ترفندهای کار با شرط در PHP
تا اینجای آموزش با ساختار اصلی شرطها در PHP آشنا شدیم. ساختار دیگری به نام switch وجود دارد که در بخش انتهایی به آن میپردازیم.
قبل از آن، بهتر است با ۲ ترفند حرفهای در شرط پی اچ پی آشنا شویم.
حذف براکت از سینتکس شرط
پیشتر گفتم که در یک حالت میتوانیم براکت را در شرط PHP قرار ندهیم؛ آن هم زمانی است که کد اسکوپ شرط (محدوده) فقط یک خط یا دستور است. اگر با اسکوپ یا محدوده آشنا نیستید، پیشنهاد میکنم آموزش اسکوپ در PHP را ببینید.
در برنامه نویسی PHP بارها و بارها اتفاق میافتد که باید کدهای HTML و PHP را در کنار هم استفاده کنیم.
در اینگونه مواقع، شاید استفاده از علامتهای {
و }
باعث سختتر شدن خوانایی کدهای ما شود. برای ساختار شرط در PHP میتوانیم برای مشخصسازی محدوده کدها، از علامت دونقطه (:
) نیز استفاده کنیم.
در این صورت، شروع محدوده با :
بوده و پایان آن با دستور endif مشخص خواهد شد.
<?php
if ( $level == 11 && $name == "Omid" ):
echo "Welcome to SabzDanesh Site " . $name . "!";
# Some Codes Here...
endif;
به این نوع نحو یا سینتکس نوشتن در PHP اصطلاحاً alternative syntax یا نحوِ جایگزین گفته میشود.
اگر میخواهید مثالهای بیشتری از روش جایگزین ببینید، به مستندات انگلیسی آن مراجعه کنید.
شرط یک خطی در PHP
گاهی میخواهیم یک شرط کوچک را بررسی کنیم و استفاده از ساختار اصلی if در PHP کمی طولانی باشد!
یک حالت از تعریف شرط در PHP وجود دارد که به آن «شرط یک خطی» گفته میشود. در این شرط میتوانیم یک ساختار if else ساده را فقط در یک خط ایجاد کنیم.
فرض کنید میخواهیم بر اساس سطح کاربری هر فرد، به کاربران سایتمان خوشآمد بگوییم. برای این کار متغیری داریم به نام isAdmin
که مشخص میکند آیا کاربر مدیر است یا خیر.
یک روش استفاده از شرط ساده زیر و یک if و else است:
if ($isAdmin) {
echo "Hello Dear Admin!";
} else {
echo "Hello Dear User!";
}
به کمک شرط یک خطی پی اچ پی، پنج خط کد بالا تبدیل به یک خط خواهد شد:
echo "Hello Dear " . ($isAdmin ? "Admin" : "User") . "!";
در این مثال از ویژگی رشتهها استفاده کردهام. برای آشنایی کامل با آنها، آموزش رشته در PHP را بخوانید.
به if یک خطی در PHP اصطلاحاً دستور شرطی سهگانه (Ternary Operator) گفته میشود. ساختار ساده آن به صورت زیر است:
(condition) ? ($true_var) : ($false_var);
اگر شرط برقرار بود، مقدار بعد از علامت سؤال (به جای $true_var
) محاسبه شده و در غیر اینصورت مقدار بعد از علامت دو نقطه ($false_var
).
ساختار شرطی switch در PHP
یکی از ساختارهای حرفهای شرطی در PHP ساختار switch و case است. این ساختار تحت عنوان دستور switch (سوییچ) یا switch case (سوئیچ کیس) هم نام برده میشود.
فرض کنید متغیری $day
نشاندهنده شماره روز هفته است. میخواهیم طبق این عدد، نام روز را نمایش دهیم.
ابتدا باید بررسی کنیم اگر $day
برابر 1 بود، امروز شنبه است؛ اگر 2 بود یکشنبه است و همینطور تا جمعه!
اولین چیزی که به ذهنمان میرسد، استفاده از 7 بلوک if elseif پشت سر هم است. برای سه روز اول داریم:
if ($day == 1){
echo "Saturday";
} else if ($day == 2){
echo "Sunday";
} else if ($day == 3){
echo "Monday";
}
#and so on...
دستور switch در PHP برای سادهسازی این فرآیند تعریف شده است.
این دستور یک ورودی داشته و میتواند بینهایت بلوک داشته باشد. هر بلوک از آن با کلمه کلیدی case مشخص میشود.
هر گاه در بلوکی مقدار ورودی switch با مقدار case برابر شد، کدهای پس از آن اجرا میشوند.
در نتیجه برنامه مورد نظرمان به صورت زیر نوشته میشود:
$day = 5;
switch ($day) {
case 1:
echo "Saturday";
break;
case 2:
echo "Sunday";
break;
case 3:
echo "Monday";
break;
case 4:
echo "Tuesday";
break;
case 5:
echo "Wednesday";
break;
case 6:
echo "Thursday";
break;
case 7:
echo "Friday";
break;
}
استفاده از break در دستور switch
گفتیم که هر جا مقدار متغیر switch با case برابر شد، خطوط پس از آن اجرا میشود. برای اینکه یک محدوده برای کدها در نظر بگیریم از کلمه کلیدی break استفاده میکنیم.
در حقیقت به کمک break، مانند کاری که در آموزش حلقه در PHP انجام میدهیم، به برنامه میگوییم اجرای کدها تا همین جا کافی است.
با این روش یک محدوده بلوک برای هر case ایجاد میکنیم.
تعریف پیشفرض یا case default
میتوانیم با تعریف یک کیس پیشفرض در switch، اگر هیچ کدام از caseها برابر مقدارهایشان نبودند، یک کار خاص انجام دهیم.
مثلاً در قطعه کد زیر کد یک رنگ را در متغیر $color
قرار میدهیم. سپس با ساختار switch نام آن را نمایش میدهیم. اگر مقدار آن برابر هیچ کدام از کد رنگهای ما نبود، پیغام مبنی بر نبود کد رنگ چاپ میشود.
$color = "#0f2e3a";
switch($color) {
case "#ff0000":
echo "Red";
break;
case "#00ff00":
echo "Green";
break;
case "#0000ff":
echo "Blue";
break;
default:
echo "Unknown";
}
جمعبندی: ساختار شرط در PHP
در این آموزش به طور جامع به آموزش شرط در پیاچپی پرداختیم. شرطهای PHP شبیه به زبانهای محاورهای ما هستند. فقط کافی است با syntax آن آشنا باشید تا بتوانید هر عبارت شرطی را بنویسید.
در ابتدا با عبارت شرطی if ساده آشنا شدیم. سپس فهمیدیم که میتوان در صورت برقرار نبودن شرط، یک بلوک دیگر از کدها را تحت عنوان else اجرا کرد. برای ترکیب چند بلوک شرطی نیز از عبارت elseif بین if و else استفاده کردیم.
در اواسط آموزش با ۲ ترفند برای کار با شرط در PHP آشنا شده و توانستیم شرطها را به صورت خواناتر میان کدهای HTML بنویسیم. همچنین تعریف شرط یک خطی را آموختیم.
در انتهای نیز با ساختار switch و case آشنا شده تا بتوانیم برخی از شرطهای طولانی و شبیه به هم را به سادگی تعریف کنیم.
امیدوارم از این آموزش استفاده کرده باشید. اگر سؤال یا نکتهای دارید، بخش نظرات برای شماست!
این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش PHP
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
عالی بود ممنون از اموزش خوبتون
خوشحالیم که برات مفید بوده پویان عزیز 🙂
سلام
من در یک حلقه مثلا نوشتم nnnn2nnn
خوب من میخوام یه شرطی بزارم ک اگ دارای 2 بود یه کاری کنه
این چگونه انجام بدم؟
سلام
شما باید با رشتهها کار کنید. جلسهاس رو حتماً ببین. یه تابع داریم به نام
strpos()
که میتونه موقعیت یه کاراکتر یا حرف رو در یه رشته بده. اگه چنین کاراکتری وجود نداشته باشه false میده. اینطوری میتونید در یه ساختار شرطی استفادهاش کنید.سلام من از فایل اطلاعاتی را در یک int ریختم و می خواهم از یک int دیگر که از ورودی گرفتم مقایسه کنم میشه لطفاً راهنمایی کنید.
سلام
میتونید از
intval()
برای تبدیل رشتهای که گرفتید به عدد استفاده و بعدش مقایسه کنید.sprintf()
هم برای موارد اعشاری خوبه. فقط بهتره قبلش بررسی کنید که آیا مقدارتون عدده یا کاراکتر هم داره؛ برای این کار از تابعis_numeric()
کمک بگیرید.هم عدد است هم کاراکتر برای این کار راهی وجود دارد ؟
اگه تیکه عددی رو کاری ندارید میتونید جداش کنید. تابع
substr()
در آموزش زیر رشته در PHP رو میتونید برای همین هدف استفاده کنید.میشه مثال بنویسید
کد من این است
خط پنجم چیه دقیقاً؟!
اگه میخواید رمزعبور رو بررسی کنید که اصلاً نیازی به تبدیل مقادیر به عدد نیست! همون رشته کافیه. چون ممکنه رمز هر کاراکتری رو شامل بشه و تبدیل کردن به عدد راهحل مناسبی نیست.
میشه لطفاً کنید یک قطعه کد بنویسید لطفاً خیلی بهش نیاز دارم اگه میشه کمک کنید این قطعه کد را درستش را بنویسید و اینجا بفرستید
شما کافیه فقط دو تا متغیر رو مقایسه کنید! مثل:
$password10 == $password2
دقیقاً همون چیزی که توی شرط if خودتون نوشتید؛ فقط خط بالاییش رو نمیدونم چیه!
اگه این جواب نمیده، قبل از شرط، هر دو تا متغیر رو echo کنید ببینید مقادیری که دارن همون چیزی هستند که از خوندن فایل یا گرفتن POST انتظار دارید یا نه.
طرف نادرست میره اگر رمز درست باشد اگه می توانید این کد را بنویسید درستش و برای من بفرستید
با پیششرطی که گفتم (تا قبل از کد زیر دو تا مقدار پسوردها رو چاپ کنید ببینید مقادیرش همونیه که انتظار دارید یا نه) قسمت مقایسه شبیه کد خودتون میشه:
خودتان امتحان کنید وقتی دستی وارد می کنیم درست است اما وقتی از ورودی می گیرم نادرست اگه می توانید راه حل را پیدا کنید
به نظر شما برای برسی رمز کاربر ها چه کار کنم
همونطور که توی کامنتهای قبلی گفته شد، میتونید قبل از شروع شرط اونها رو چاپ (echo) کنید ببینید چه چیزی اضافه یا کم دارند. اینطوری متوجه میشید کجای دریافت دادهها از فایل یا فرم مشکل داره.
سلام خسته نباشید من یهه برنامه نویس مبتدی هستم استادم بهم یه تکلیف داده اینک من باید یک سری ارایه ایجاد کنم (میدونم چ جوری ایجاد کنیم) بعد اون هارو به یک جوری به شرط ها برای validation کردن انتقال بدم باید ارایه من دو بعدی باشه و هر چقدر که باید ادامه داشته باشه ( یعنی هر جقدر ادامه داشته باشه اون ارایه ها باید اعتبار سنجی بشه) میشه راهنمایی کنید؟؟؟؟
سلام
یه راهحل ساده اینه که شما از یه آرایه دو بعدی استفاده کنید. یعنی آرایهای از همین آرایهها که قراره اعتبارسنجی بشن. با یه حلقه foreach هر کدوم از این آرایهها رو (هر چند تا که باشند) بررسی کنید.
برای بررسی هم احتمالاً تعریف تابع اعتبارسنجی بهتون خیلی کمک کنه.
خیلی خوب توضیح دادین واقعاً ممنونم
خوشحالم که این آموزش براتون کاربردی بوده! موفق باشید.
سلام وقتتون بخیر و تشکرات فراوان بابت آموزش بسیار عالیتون
فقط یه نکته ایی که خواستم عرض کنم اینه که در دو تا از مثالهای این درس ایراد وجود داشت که اولی توی شرط if بود که میخواستیم عددهای x , y رو باهم ضرب کنن که کدها کار نکردند.
دومی هم توی case default بودن که دیگه نباید کلمه case نوشته بشه تا کدها اجرا بشن.
ممنون بابت آموزش عالیتون.
سلام
متغیرها رو قبلش تعریف کردید؟ طوری که توی شرط صدق کنه؟!
ممنون که تذکر دادید، switch default اصلاح شد.
بله اجرا شد
ممنون بابت پاسختون