CHAPTER 4 Control Statements
Agenda โปรแกรมแบบโครงสร้าง คำสั่ง if คำสั่ง switch คำสั่ง while คำสั่ง do..while คำสั่ง for คำสั่ง break คำสั่ง continue
โปรแกรมแบบโครงสร้าง ในการเขียนโปรแกรมแบบโครงสร้าง จะมีรูปแบบการ แก้ปัญหาหรือรูปแบบการเขียน โปรแกรมอยู่ 3 ลักษณะ คือ - การเขียนแบบลําดับ (Sequential) - การเขียนแบบเงื่อนไข (Selection) - การเขียนแบบวนซํ้า (Repetition)
โปรแกรมแบบโครงสร้าง เท็จ จริง จริง เท็จ เงื่อนไข จริง เท็จ จริง เท็จ Sequential Selection Repetition
ประเภทของ Control Statements คำสั่งเลือกทำ (Selection Statements) if … . . else switch คำสั่งวนทำซ้ำ/คำสั่งลูป (Repetition Statement ) while do .. while for PHP 5
คำสั่ง if if เป็นคำสั่งที่ใช้สำหรับการทดสอบเงื่อนไข และเลือกปฏิบัติตามเงื่อนไข - if statement รูปแบบ if (condition) { statement; …… } ตัวอย่าง if ($height > 0 && $width > 0) { $area = $height*$width; echo “Area of square = ” .$area; } เงื่อนไข เท็จ จริง คำสั่งต่าง ๆ เมื่อ เงื่อนไขเป็นจริง คำสั่งถัดไป
คำสั่ง if..else เงื่อนไข คำสั่งต่าง ๆ เมื่อ เงื่อนไขเป็นจริง คำสั่งถัดไป จริง เท็จ เงื่อนไขเป็นเท็จ - if…else statement รูปแบบ if (condition) { statement; ……} else ตัวอย่าง if ($height > 0 && $width > 0) { $area = $height*$width; echo “Area of square = ” .$area; } { echo “Please enter new value”;}
คำสั่ง if..elseif เงื่อนไข 1 เท็จ จริง เงื่อนไข 2 คำสั่งต่าง ๆ เมื่อ เงื่อนไข 1 เป็นจริง เท็จ จริง เงื่อนไข 3 คำสั่งต่าง ๆ เมื่อ เงื่อนไข 2 เป็นจริง เท็จ จริง คำสั่งต่าง ๆ เมื่อ เงื่อนไข 3 เป็นจริง คำสั่งถัดไป
คำสั่ง if..elseif - if…elseif statement (nested if statement) รูปแบบ if (condition1) { statement; ……} elseif (condition2) else ตัวอย่าง if ($score < 0) echo “Enter new score\n”; elseif ($score >= 80.0) $grade = “A”; elseif ($score >= 60.0) $grade = “B”; $grade = “C”;
การใช้ { } หากเงื่อนไขเป็นจริงหรือเท็จแล้วต้องทำคำสั่งมากกว่า 1 คำสั่ง จะต้องใช้เครื่องหมาย { } ซึ่งแสดงขอบเขต (block) ของคำสั่งที่ต้องถูกกระทำ ทั้งนี้หากมีคำสั่งเพียงคําสั่งเดียวในเงื่อนไข ก็สามารถใช้เครื่องหมาย { } ได้เช่นเดียวกัน
คำสั่งที่ต่างๆ เมื่อตัวแปร คำสั่ง switch เป็นคำสั่งที่มีการทำงานคล้ายคำสั่ง if แต่จะมีการกำหนดเป็นทางเลือก ซึ่งอาจมาจากเงื่อนไข หรือ ค่าของตัวแปรที่ต้องการตรวจสอบ ตัวแปร case : ค่าที่ 1 คำสั่งที่ต่างๆ เมื่อตัวแปร มีค่าเท่ากับค่าที่ 1 case : ค่าที่ 2 มีค่าเท่ากับค่าที่ 2 case : ค่าที่ N มีค่าเท่ากับค่าที่ N คำสั่งถัดไป
คำสั่ง switch การใช้ switch จะตามด้วยตัวแปรที่ต้องการตรวจสอบค่า ถ้าตรงกับ case ไหน จะทำตามคำสั่งใน case นั้นไปจนกว่าจะเจอคำสั่ง break แต่ถ้าหากเปรียบเทียบแล้วไม่ตรงกับ case ใด ๆ เลย จะทำในคำสั่ง default รูปแบบ switch (variable) { case value1 : statement; break; case value2 : statement; case valueN : statement; default : statement; }
ตัวอย่าง <html> <body> <font size=5 face="MS Sans Serif"> <? $day = date("l"); switch ( $day) { case "Monday" : print("วันนี้วันจันทร์");break; case "Tuesday" : print(" วันนี้วันอังคาร ");break; case "Wednesday" : print(“วันนี้วันพุธ");break; case "Thursday" : print(" วันนี้วันพฤหัส ทำงานอีกวันก็หยุดแล้ว");break; case "Friday" : print(" วันนี้วันสุดท้ายของการทำงาน");break; default : print(“เฮ.. วันนี้วันหยุด นอนอยู่บ้าน"); } ?> </font> </body> </html>
ตัวอย่าง: กรณีหลาย case ทำงานอย่างเดียวกัน /* How many days in a month? */ switch ($month) { case 2: //Feb $days = 28; break; case 9: // Sep case 4: // April case 6: // June case 11: // Nov $days = 30; break; default: $days = 31; // All of the rest } printf (“ There are %d days in that month.”, $days);
เปรียบเทียบคำสั่ง switch กับ if $year = 15; switch ($year){ case 5 : $rate = 12; break; case 15 : $rate = 18; case 20 : $rate = 24; default : echo "Error!!"; } $year = 15; if($year == 5) { $rate = 12; }elseif($year == 15) { $rate = 18; }elseif($year == 20) { $rate = 24; }else{ echo "Error!!"; } คำสั่ง switch คำสั่ง if
คำสั่ง while และ do.. while while และ do .. while เป็นการทำงานแบบ loop เช่นกัน แต่มีการเปลี่ยนตำแหน่งของการเช็คเงื่อนไข while จะเช็คก่อนทำใน loop ดังนั้น ถ้าเช็คครั้งแรกแล้วเงื่อนไขเป็นเท็จ จะไม่มีการเข้าทำงานในลูปเลย do.. while ทำใน loop 1 ครั้งก่อนแล้วค่อยไปเช็คเงื่อนไข ดังนั้น ถึงการเช็คเงื่อนไขครั้งแรกเป็นเท็จ คำสั่งที่อยู่ภายในลูปก็จะได้รับการทำงานอย่างน้อยที่สุด 1 ครั้งเสมอ
คำสั่งทำซ้ำ while เปรียบเทียบกับ do..while เงื่อนไข คำสั่งที่ 1 คำสั่งที่ 2 จริง เท็จ while คำสั่งที่ 1 เงื่อนไข จริง เท็จ คำสั่งที่ 2 do..while
เมื่อไหร่จะใช้คำสั่ง while และ do..while เมื่อต้องการให้เกิดการทำงานซ้ำ จะทำงานเมื่อเงื่อนไขเป็นจริง ไม่รู้ว่าจะต้องทำซ้ำกี่ครั้ง (แต่ถึงรู้จำนวนครั้งที่จะวนซ้ำ ก็สามารถใช้ while และ do..while ได้ เพียงแต่ไม่เป็นที่นิยม เพราะจะใช้ for แทน) คำสั่งที่อยู่ใน loop ต้องส่งผลให้เงื่อนไขที่เช็คมีโอกาสเป็นเท็จ (ออกจาก loop ได้) มิเช่นนั้นจะเกิดเหตุการณ์ loop ไม่รู้จบ การใช้ while จะต้องมี 3 สิ่งคือ ค่าเริ่มต้นการเข้า loop (อาจรับค่าหรือกำหนดค่า) กำหนดเงื่อนไข (loop ทำเมื่อเงื่อนไขเป็นจริง) มีการเปลี่ยนแปลงค่าตัวแปรก่อนวนกลับไปตรวจสอบเงื่อนไข
คำสั่ง while และ do..while - while statement รูปแบบ while (condition) { statement; …… } - do…while statement รูปแบบ do { statement; …… } while (condition);
ตัวอย่าง while <html> <body> <? $size = 1; while ($size<7) { print("<font size=$size face='arial' color=blue>HELLO<br>"); $size++; } ?> </body> </html>
ตัวอย่าง while <html> <body> <font size=4 face='arial'> <? $str="A"; while ($str<"Z") { echo $str; $str++; } ?> </font> </body> </html>
ตัวอย่าง do while <html> <body> <font size=4 face='arial'> <? $a=1; do{ echo $a," "; $a++; }while ($a<=20); ?> </font> </body> </html>
คำสั่ง for รูปแบบ for (initial value; condition; change value) เป็นคําสั่งวนซ้ำที่ใช้แก้ปัญหาโจทย์ลักษณะ ที่มีการทำงานเดิมซ้ำๆกันหลาย ๆ ครั้งโดยที่รู้จำนวนรอบที่แน่นอน รูปแบบ for (initial value; condition; change value) { statement; …… } รูปแบบแบ่งออกเป็น 3 ส่วน คือ - ส่วนกำหนดค่าตัวนับ เป็นการกำหนดค่าเริ่มต้นให้กับ ตัวแปร เพื่อใช้ควบคุมการวน loop - ส่วนที่ตรวจสอบเงื่อนไขเพื่อตัดสินว่าจะวนซ้ำ หรือไม่ - ส่วนของการจัดการค่าตัวนับของการวนซ้ำ เป็นการ เพิ่มค่าหรือการลดค่าให้ตัวแปรที่ควบคุม loop โดยทั้ง 3 ส่วนนี้เป็นนิพจน์
ตัวอย่าง for for ( $i=1 ; $i <= 3 ; $i++) { echo $i.“Hello”; } For i=1 to 3 พิมพ์ค่า i พิมพ์ Hello for ( $i=1 ; $i <= 3 ; $i++) { echo $i.“Hello”; }
การใช้คำสั่ง for 1.การเพิ่มค่าในแต่ละรอบจะเป็นเท่าไรก็ได้ เช่น for(x = 0;x<=100;x+= 5) printf(“%d\n”,x); 2.ในส่วนของการเปลี่ยนค่า นอกจากการเพิ่มค่า (increment) สามารถกำหนดให้มีการลดค่าของตัวแปรที่ใช้ในการวนรอบได้ for(x = 100;x>0;x--) 3.ตัวแปรที่ใช้ในการวนรอบอาจกำหนดให้เป็นชนิด char ได้ for(ch = ‘a’;ch<=‘z’;ch++) printf(“character = %c\n”,ch);
คำสั่ง for แบบซ้อน (Nested for Statement) ในการใช้ คำสั่ง for โปรแกรมอาจมีการกำหนด คำสั่ง for อย่างน้อยอีกหนึ่งชุดซ้อนเข้ามา โปรแกรมจะเริ่มทำงานจาก for ลูปนอก ไปสู่การทำงานของ for ลูปใน แล้วโปรแกรมจะทำงาน for ลูปในจนเสร็จ จากนั้นโปรแกรมจึงกลับไปทำงาน for ลูปนอกอีกครั้ง ซึ่งโปรแกรมจะทำงานเช่นนี้ไปเรื่อย ๆ จนกว่าเงื่อนไขของ for ลูปนอก เป็น เท็จ (0) คำสั่ง ดังกล่าว เรียกว่า คำสั่ง for แบบซ้อน (nested for)
ตัวอย่าง for ซ้อน for for ( $out = 1; $out <= 3; $out++ ) { in 1 in 2 in 3 in 4 in 5 out 2 out 3 for ( $out = 1; $out <= 3; $out++ ) { echo “out $out”; for ($in = 1; $in <= 5; $in++ ) echo “in $in <br>”; echo “<br>”; }
คำสั่ง Break คำสั่ง break จะใช้หยุดการทำงานของวนรอบ loop เมื่อเข้าสู่สถานะการณ์ที่สร้างโดยเงื่อนไขของ break for ($i=1; $i<11; $i++) { if ($i == 6) break; echo "Hello...ครั้งที่ $i <br>"; }
คำสั่ง Continue คำสั่ง Continue จะทำงานตรงข้ามกับคำสั่ง Break คำสั่ง Continue จะสั่งให้โปรแกรมทำงานต่อไป : คำสั่ง Continue กับ For คือจะเป็นการสั่งให้กลับไปเพิ่มค่าให้กับตัวแปรทันที : คำสั่ง Continue กับ While คือจะเป็นการสั่งให้กลับไปทดสอบเงื่อนไขใหม่ทันที for ($i=1; $i<11; $i++) { if ($i==6) continue; echo "Hello...ครั้งที่ $i <br>"; }