توی این قسمت میخوایم یکی از ساده ترین مفاهیم اکثر زبان های برنامه نویسی رو درک کنیم.
مفهوم اگر یا if رو تقریبا شما هر روز بار ها توی حرف زدنتون استفاده می کنید! این مفهوم تو اکثر زبان های برنامه نویسی هم وجود داره که در ادامه با مثال می بینیم که توی php چطوری میشه بکارش برد.
عبارت های if، else و elseif
اول با یه مثال ساده شروع می کنیم. یه نفر از شما می پرسه “آیا ۵ بزرگ تر از ۶ است؟” شما پیش خودتون میگید اگر با منطق من ۵ بزرگتر از ۶ هست بگو آره در غیر این صورت بگو خیر، و در نهایت می گی خیر چون ۵ بزرگتر از ۶ نیست. حالا همین مثال رو توی php مینویسیم:
//Is 5 greater than 6?
if (5 > 6)
{
echo "Yes!";
}
else
{
echo "No!";
}
?>
if در واقع همون اگر تو زبان فارسی هست و همیشه جلوش داخل پرانتز یه گزاره قرار می گیره! گزاره یعنی یک عبارت که یا درست باشه (true) یا غلط (false). در صورتی که درست باشه کمپایلر php عبارت های بعد از if رو که بین { و } هستند رو اجرا می کنه در غیر این صورت عبارت های بعد از else رو که توی } و { هستند رو اجرا می کنه. مثلا توی این مثال ما همه می دونیم که ۵ > 6 نیست پس نتیجه ی این گزاره false هست و در نتیجه عبارات بعد از else اجرا می شن. یعنی توی صفحه می نویسه No! که جوابی هست که ما انتظار داشتیم.
حالا اگر به جای ۵ > 6 گزاره ی ۶ > 5 رو داشتیم، جواب گزاره true می شد و در نتیجه نتیجه ی Yes! رو می گرفتیم.
اصلا نگران نباشید اگر هنوز درست متوجه نشدین. با مثال های بیشتر این موضوع کاملا جا میفته.
$age = 100;
if ($age > 80)
{
echo "You are old!";
}
?>
توی این مثال ما اول مقدار ۱۰۰ رو توی $age ریختیم . توی خط سوم می به دستور if میرسیم. که میگه اگر $age > 80 یه گزاره ی صحیح بود عبارت You are old! رو به عنوان خروجی بده. همونطوری که می بینیم $age بزرگ تر از ۸۰ هست پس روی خروجی You are old! رو خواهیم دید.
-
ببخشید چرا اینجا عبارت else رو نداریم؟
-
” عبارت else یه عبارت Optional یا اختیاریه و ما می تونیم if بدون else داشته باشیم. “
-
خوب حالا اگر مقدار $age کمتر از ۸۰ میشد چه اتفاقی میفتاد؟
-
” اگر مقدار $age مثلا ۵۰ بود وقتی کمپایلر به خط سوم می رسید می دید گزاره غلط هست و در نتیجه عبارات بین { و } بعد از if رو اجرا نمی کرد و خروجی ما خالی می شد. “
حالا یه مثال دیگه:
$grade = 18;
if ($grade >= 19)
{
echo "A";
}
elseif ($grade >= 17)
{
echo "B";
}
elseif ($grade >= 14)
{
echo "C";
}
else
{
echo "D";
}
//Output: B
?>
توی این مثال چند تا نکته ی جدید داریم. یکی علامت >= هست که به مفهوم بزرگتر مساویه، همونطوری که حدس زدید <= هم به مفهوم کوچکتر مساویه. و بعدی elseif هست که الان خط به خط جلو می ریم و می بینیم چیه!
خوب کمپالر توی خط دوم مقدار ۱۸ رو توی $grade قرار میده و خط سوم به if میرسه و می بینه که ۱۸ بزرگتر مساوی ۱۹ نیست پس گزاره غلطه و دستور echo “A” اجرا نمیشه. بعد از اون به اولین elseif میرسه. دستور elseif به معنی در غیر این صورت اگر هست. کمپایلر می بینه که $grade بزرگتر از ۱۷ هست پس این شرط درسته و در نتیجه دستورات داخل { و } جلوی این elseif رو اجرا می کنه و دیگه elseif ها و else بعدی رو چک نمی کنه! پس در نتیجه خروجی ما “B” خواهد بود.
این از خاصیت های ساختار if، elseif و else هست. یعنی هر جا شرطی درست بود دیگه شرط های دیگرو چک نمی کنه. که اسمش هم همین رو نشون میده. ما می گیم اگر این گزاره درست بود فلان کار رو بکن، در غیر این صورتاگر این یکی درست بود یکار دیگه بکن و در نهایت هم اگر هیچ کدوم درست نبودن عملیات بین { و } بعد از else رو انجام بده.
حالا می ریم سراغ مثال بعد:
$grade = 20;
if ($grade = = 20)
echo "Full mark";
else
echo "Keep trying";
?>
توی این مثال هم دو تا نکته ی جدید داریم.
همونطور که می بینید توی خط سوم ما از گزاره ی $grade = = 20 استفاده کردیم. حالا این = = یعنی چی؟ توی زبان php و خیلی زبان های دیگه برای اینکه چک کنیم دو تا مقدار با هم مساوی هستند یا نه از = = استفاده می کنیم. پس باید حواستون باشه که از = برای چک کردن اینکه دو مقدار با هم مساوی هستند یا نه استفاده نکنید چون اگر این کار رو بکنید php به شما هیچ errorای هم نمی ده اما شما نتیجه ی مورد انتظارتون رو دریافت نخواهید کرد. مثلا توی همین مثال اگر بجای = =، علامت = رو قرار بدیم همیشه خروجی Full mark رو خواهیم گرفت.
-
ببخشید میشه بیشتر توضیح بدید که چرا؟
-
” اول باید یه نکترو بگم! اکثر زبان های برنامه نویسی ۰ رو به عنوان false یا غلط در نظر می گیرن و هر عدد دیگه بجز اون رو به عنوان true یا درست! php هم جزو همون زبان هاست.حالا اگر به جای = = از = استفاده کنیم کمپایلر به خط سوم که میرسه مقدار ۲۰ رو توی متغیر $grade میریزه بجای اینکه اون دو تارو مقایسه کنه و در نهایت می بینه مقدار $grade عددی بجز صفر هست پس این گزاررو درست در نظر می گیره و Full mark رو اکو می کنه. اگر مقدار $grade بجای ۲۰، ۱۷ یا ۱۸ یا هر عدد دیگه ای هم می بود باز به ما Full mark رو می داد که نتیجه ی مطلوب ما نبود. پس حواستون باشه توی if برای مقایسه باید از = = استفاده کنیم و = برای اینکار غلطه. “
نکته ی دیگری که احتمالا تا الان دیدید اینه که ما تو این مثال از { و } نه بعد از if استفاده کردیم و نه بعد از else. دلیلش اینه که بعد از دستور if و esle فقط یه دستور دیگه وجود داره. در صورتی که بعد از if یا elseif یا else فقط یه دستور وجود داشته باشه می تونیم { و } رو نگذاریم. پس برای تمام مثال های قبل هم می تونستیم { و } رو نگذاریم. اما اگر دو خط دستور یا بیشتر داشته باشیم حتما باید از { و } استفاده کنیم.
$name = "Siavash"
if ($name = = "Siavash")
echo "Hello Siavash";
else
{
echo "I don't know you!";
die("bYe");
}
echo "How are you?";
// The rest of the program goes here...
?>
همونطوری که توی این مثال می بینید ما بعد از if از { و } استفاده نکردیم. چون فقط یه خط بعد از if بود اما بعد از else چون دو خط دستور داشتیم باید حتما از { و } استفاده می کردیم.
چیزی که شاید ذهنتون رو مشغول کرده باشه خط هشتم هست. که از دستور die() استفاده کردیم. این دستور هر جا که بیاد ادامه ی برنامرو متوقف می کنه. یعنی کمپایلر به این دستور که میرسه دیگه ادامه ی خط ها رو اجرا نمی کنه علاوه بر اون یه رشته هم جلوی خودش داخل پرانتز می گیره و قبل از اتمام برنامه اون رو چاپ می کنه. مثلا توی این مثال اگر مقدار $name به جای “Siavash” هر چیز دیگه ای بود کمپایلر چون می دید گزاره ی خط سوم درست نیست داخل else رو اجرا می کرد یعنی اول “I don’t know you!” رو اکو می کرد و بعدش می نوشت “bYe” و برنامه تموم می شد. یعنی خط ۱۰ مثلا اجرا نمی شد.
اما اگر مثال به همین شکل بالا باشه یعنی مقدار $name همون “Siavash” باشه خط ۴ اجرا می شه و در نتیجه “Hello Siavash” اکو میشه و بعد از اون هم خط ۱۰ اجرا میشه و “How are you?” هم اکو میشه!
پس دستور die() هر جایی اجرا شه کمپایلر کارش رو متوقف می کنه!
دستور if توی چند زبان دیگه بصورت زیره:
PHP
$grade = 20;
if ($grade = = 20)
echo "Great!";
elseif ($grade > 15)
echo "Good!";
else
{
echo "Bad!<br />";
echo "Study more!";
}
?>
C++
void main()
{
int grade;
grade = 20;
if ($grade = = 20)
cout << "Great!";
else if ($grade > 15)
cout << "Good!";
else
{
cout << "Bad!n";
cout << "Study more!";
}
}
Pascal
grade : integer;
begin
grade := 20;
if grade = 20 then
writeln('Great!')
else if grade > 15 then
writeln('Good!')
else begin
writeln('Bad!');
writeln('Study more!');
end;
end.
Visual Basic
Private Sub Form_Load()
grade = 100
If grade = 100 Then
MsgBox "Great"
ElseIf grade > 15 Then
MsgBox "Good"
Else
MsgBox "Bad"
MsgBox "Study more!"
End If
End Sub
Java
لینک های داخلی
http://www.syavash.com/portal/users/siavash/blogs/introduction-on-php-part-1-fa
اوه ، می دونی تو خیلی روون درس می دی دمت قیج ، این آموزشتم مثل اولیش توپ رو رروون بود ولی چون مباحث سنگین تر شد کمی قاطیدم ، ولی مرسی ، می تونی بگی کل پی اچ پی رو چند تا جلسه دیگه تموم می کنی و این که چند روز یک بار آموزش جدید می زاری؟ واالله خبرنامه که نداریی
راستی ، مرسی
من شیوه تدریست را می پسندم ولی یک نظر داشتم درباره فارسی نویسی و انگلیسی نویسی در آن، بد نیست عبارات انگلیسی را مانند: Sample English! چپ به راست بنویسی .
دمت گرم داش سیاوش آخرشی
ببخشید دیر به دیر سر میزنم
چاکرتیم
بسیار عالی بود ممنون
آخه نمیشه که ما هی بگیم ولی جوابی نشنویم!!
دوست خوبم برات آرزوی موفقیت می کنم
“لطفا ادامه بدید. بسیار عالیه ممنون”
آقا مث مقاله قبلی خیلی توپ بود خدا عجرت بده دمت گرم فقط ادامه بدید ممنون .
آقا دمت گرم ولی بقیش کو؟!!!!
مث آموزش اول توووووپ و عالی…
Dude, Where’s the rest? how often are you going to give out a part of this tutorial??
اقا کارت خیلی درسته …
پس بقییش کو..
اقا دستت درد نکنه…خیلی عالیه.
ولی به قول far “پس بقیش کو..”؟؟؟
این یکی هم عالی بود
منتظر ادامش ایم :دی
موفق باشی
ممنون. قسمت اولش خوب بود، امیدوارم قسمت دومش هم خوب باشه.
http://www.php.net
این کد اشنباه نوشتی بین دوتا = فاصله گذاشتی
ولی خـــــــــــــــــــــــــــــــیلی خوب بود
دستت درد نکنه، باحال بود. فقط اگه یه جورایی کاربرد عملی این دستورها رو تو طراحی سایت بگی هم خیلی عالی میشه…
salam
agha mishe baz ham amoozeshe PHP bezari ?
ravesh tadriset fogholadast , mamnun
حتی قسمت ارسال نظرت هم با ایجکس کار میکنه ایول حالا خودت این سایتو طراحی کردی ؟
واقعا حرف نداشت دوست عزیز..
تا حالا آموزش زبانی به این روونی و دقیقی ندیده بودم.
آدمایی که دلسوزانه و دقیق اما ساده به دیگران چیزی رو یاد میدن واقعا انسانهای بی نظیری هستن.
امیدوارم آموزش های دیگه ای از شما، را هم ببینیم.
asdasd asda sdas dasda