PHP เบื้องต้น > ภาษา PHP
โครงสร้างควบคุม
โครงสร้างควบคุมคือ โครงสร้างภายในภาษาคอมพิวเตอร์ที่ใช้ควบคุมการไหล เมื่อทำการประมวลผลบนโปรแกรมหรือสคริปต์ โดยสามารถจัดกลุ่มเป็นโครงสร้างเงื่อนไข (เช่น if) และโครงสร้างวนรอบ หรือ loop (เช่น do)
ประโยคคำสั่ง if
ประโยคคำสั่ง if ใช้ในการตัดสินใจ โดยต้องให้ เงื่อนไขกับประโยคคำสั่ง if ใช้งาน ถ้าเงื่อนไขเป็นจริง กลุ่มคำสั่ง (block code) จะได้รับการประมวลผล เงื่อนไขในประโยคคำสั่ง if ต้องอยู่ในวงเล็บ
ตัวอย่างเช่น ถ้าการสั่งไม่มีจำนวนยาง น้ำมัน หรือ หัวเทียน ซึ่งอาจจะเกิดจากการคลิกปุ่ม submit อย่างไม่ตั้งใจ นอกจากบอกว่า "ประมวลผลแล้ว" แล้ว เพจควรให้ข่าวสารที่มีประโยชน์
เมื่อ การสั่งซื้อไม่มีรายการ อาจจะบอกว่า "ท่านไม่ได้ทำรายการสั่งซื้อจากหน้าก่อน"
if ($ totalqty == 0)
echo "ท่านไม่ได้ทำรายการสั่งซื้อจากหน้าก่อน<br/>";
เงื่อนไข $totalqty == 0 เป็นจริง ถ้า $totalqty เท่ากับศูนย์ ถ้า $totalqty ไม่เท่ากับศูนย์ เงื่อนไขนี้เป็น FALSE เมื่อ เงื่อนไขเป็น TRUE ประโยคคำสั่ง echo จะได้รับการประมวลผล
code block ถ้ามีประโยคคำสั่งมากกว่า 1 ชุด ที่ต้องประมวลผลภายในประโยคคำสั่งนั้น สามารถจัดประโยคคำสั่งเป็นกลุ่มคำสั่ง โดยประกาศกลุ่ม ด้วยการล้อมด้วยเครื่องหมายปีกกา { }
if ($ totalqty == 0)
{
echo "<font color = red>";
echo "ท่านไม่ได้ทำรายการสั่งซื้อจากหน้าก่อน<br/>";
echo "</font>";
}
หมายเหตุ ควรใช้ย่อหน้าเพื่อทำให้คำสั่งอ่านง่ายขึ้น เช่น กลุ่มคำสั่งของ if ให้มีการย่อหน้ากลุ่มคำสั่ง
ประโยคคำสั่ง else
โดยส่วนใหญ่ การตัดสินใจ ไม่ต้องการเพียง 1 การกระทำ แต่ต้องการชุดการกระทำที่เป็นไปได้สำหรับการทำงานประโยคคำสั่ง else ยอมให้กำหนดการกระทำทางเลือกเพื่อนำมาใช้ เมื่อเงื่อนไขในประโยค if เป็น FALSE ตามตัวอย่าง เมื่อการเตือนลูกค้า จากการส่งใบสั่งซื้อที่ไม่มีรายการ ในทางตรงข้าม ถ้ามีการสั่งซื้อจริงควรมีการแสดงรายละเอียดสั่งซื้อ
if ($ totalqty == 0)
{
echo "ท่านไม่ได้ทำรายการสั่งซื้อจากหน้าก่อน<br/>";
}
else
{
echo $soapqty." ก้อน<br>";
echo $shampooqty." ขวด<br>";
echo $conditionerqty." ขวด<br>";
}
ประโยคคำสั่ง if สามารถนำไปสร้าง กระบวนการทางตรรกะซับซ้อนได้ ตัวอย่างคำสั่งต่อไป ไม่เป็นเพียงการสรุปตามเงื่อนไข $totalqty = =0 เป็น TRUE แต่สามารถให้แต่ละบรรทัด สรุปในการแสดงผลตามเงื่อนไขของตัวเอง
if ($ totalqty == 0)
{
echo "ท่านไม่ได้ทำรายการสั่งซื้อจากหน้าก่อน<br/>";
}
else
{
if ($soapqty >0)
echo $soapqty." ก้อน<br/>";
if ($shampooqty > 0)
echo $shampooqty." ขวด<br/>";
if ($conditionerqty > 0)
echo $conditionerqty." ขวด<br/>";
}
ประโยคคำสั่ง elseif
ถ้าการตัดสินใจ มีทางเลือกมากกว่า 2 ทาง เลือก ประโยคคำสั่ง elseif สามารถสร้างได้หลายทางเลือก โดยประโยคคำสั่งนี้ เป็นการรวมประโยคคำสั่ง else และ if
ตัวอย่างการให้ส่วนลดในการซื้อแชมพูขึ้นกับขนาดการสั่ง
- น้อยกว่า 10 ขวด ไม่มีส่วนลด
- 10 - 29 ขวด ส่วนลด 5%
- 30 - 49 ขวด ส่วนลด 10%
- 50 หรือมากกว่า ส่วนลด 15%
การคำนวณส่วนลด สามารถใช้ประโยคคำสั่ง if และ elseif โดยมีความจำเป็นในการใช้ AND เพื่อรวม 2 เงื่อนไขเข้าด้วยกัน
if ($shampooqty < 10)
discount = 0;
elseif ($shampooqty >= 10 && $shampooqty < 29)
discount = 5;
elseif ($shampooqty >= 30 && $shampooqty < 49)
discount = 10;
elseif ($shampooqty >= 50 )
discount = 15;
ประโยคคำสั่ง switch
ประโยคคำสั่ง switch ทำงานแบบเดียวกับประโยคคำสั่ง if แต่ยอมให้เงื่อนไขมีมากกว่า 2 ค่า การควบคุมแต่ละค่า ใช้ประโยคคำสั่ง case สำหรับ default case ใช้ควบคุมค่าอื่น นอกเหนือจากประโยคคำสั่ง case ที่เจาะจงไว้
ตัวอย่าง เช่น ต้องการทราบการโฆษณาแบบใดมีความเหมาะสม ในกรณีนี้สามารถเพิ่มคำถามในใบสั่งซื้อ ให้เพิ่มคำสั่ง HTML กับใบสั่งซื้อ และ ฟอร์มจะมีลักษณะตามภาพ 1.2.2
<tr>
<td>ท่านรู้จัก พูนพนา อย่างไร</td>
<td><select name="find">
<option value = "a">ลูกค้าปกติ
<option value = "b">โฆษณาทางโทรทัศน์
<option value = "c">สมุดโทรศัพท์หน้าเหลือง
<option value = "d">เพื่อนบอก
</select>
</td>
</tr>
คำสั่ง HTML นี้ เพิ่มตัวแปรใหม่ที่มีค่าเป็น "a" "b" "c" หรือ "d" การควบคุมตัวแปรใหม่ด้วยชุดของประโยคคำสั่ง if และ elseif ในลักษณะนี้
if ($find =="a")
echo "<p>ลูกค้าปกติ</p>";
elseif ($find =="b")
echo "<p>ลูกค้าจากโฆษณาทางโทรทัศน์</p>";
elseif ($find =="c")
echo "<p>ลูกค้าจากสมุดโทรศัพท์หน้าเหลือง</p>";
elseif ($find =="d")
echo "<p>ลูกค้าจากเพื่อนบอก</p>";
ภาพ 1.2.2 ใบสั่งซื้อที่ถามลูกค้าว่ารู้จัก พูนพนา อย่างไร
ถ้าเขียนด้วยประโยคคำสั่ง switch ได้ดังนี้
switch case ($find)
{
case "a" :
echo "<p>ลูกค้าปกติ</p>";
break:
case "b" :
echo "<p>ลูกค้าจากโฆษณาทางโทรทัศน์</p>";
break;
case "c" :
echo "<p>ลูกค้าจากสมุดโทรศัพท์หน้าเหลือง</p>";
break;
case "d" :
echo "<p>ลูกค้าจากเพื่อนบอก</p>";
break;
default :
echo "<p>เราไม่ทราบว่าลูกค้าพบเราอย่างไร</p>";
break;
}
ประโยคคำสั่ง switch มีพฤติกรรมต่างจากประโยค if หรือ elseif ประโยคคำสั่ง if ทำงานกับ 1 ประโยคคำสั่ง ถ้าไม่มีวงเล็บปีกกา ส่วน switch ทำงานต่างกัน เมื่อ case ใน switch เข้าสู่การประมวลผล PHP จะประมวลผลประโยคคำสั่งจนกระทั่งพบ break ถ้าไม่มี break การประมวลผลของ switch จะทำงานต่อไปจนถึง case ที่เป็น TRUE เมื่อมาถึง break บรรทัดต่อไปของคำสั่ง หลังจากประโยคคำสั่ง switch จะได้รับการประมวลผล
while loop
คอมพิวเตอร์ทำงานแบบประมวลผลซ้ำได้ดี ถ้ามีการคำนวณตามจำนวนครั้งจะสามารถใช้ loop เพื่อทำงานบางส่วนของโปรแกรมซ้ำ
พูนพนา ต้องการตารางแสดงค่าขนส่งที่จะเพิ่มในใบสั่งซื้อของลูกค้า ค่าขนส่งของบริษัทขนส่งขึ้นกับระยะทางในการส่งพัสดุ ค่าใช้จ่ายสามารถแสดงผลด้วยสูตรง่ายๆ ตามภาพ 1.2.3
ภาพ 1.2.3 แสดงค่าขนส่งตามระยะทาง
while loop เป็นการทำงานวนรอบง่ายที่สุดของ PHP ซึ่งเหมือนกับประโยคคำสั่ง if ที่ขึ้นกับเงื่อนไขความแตกต่างระหว่าง while loop กับ ประโยคคำสั่ง if คือ ประโยคคำสั่ง if ประมวลผลกลุ่มคำสั่งเพียงครั้งเดียว ถ้าเงื่อนไขเป็นจริง while loop ประมวลผลกลุ่มคำสั่งซ้ำ ตราบเท่าที่เงื่อนไขเป็นจริง โดยทั่วไป while loop ใช้ เมื่อไม่ทราบจำนวนรอบประมวลผล
ไวยากรณ์พื้นฐานของ while loop คือ
while (condition) expression
ตัวอย่าง while loop แสดงหมายเลข จาก 1 ถึง 5
<?php
$num = 1;
while ($num <= 5)
{
echo $num."<br/>";
$num++;
}
?>
จุดเริ่มต้นของแต่ละรอบ คือ การทดสอบเงื่อนไข ถ้าเงื่อนไขเป็นเท็จ จะไม่มีการประมวลผล และสิ้นสุด loop ประโยคคำสั่งต่อไป หลังจาก loop จะได้รับการประมวลผลต่อไป
for loop
for loop สามารถทำงานกับตัวนับได้ดี
ไวยากรณ์พื้นฐานของ for loop คือ
for (expression1; condition ; expression2)
expression3;
expression1 ประมวลผลเพียงครั้งเดียวเมื่อเริ่มต้นตามปกติใช้ทำค่าเริ่มต้นของตัวนับ
condition ทดสอบนิพจน์ ก่อนเริ่มแต่ละรอบ ถ้านิพจน์ส่งออกมีค่าเป็นเท็จจะเป็นการสิ้นสุดรอบการทำงาน ตามปกติ ใช้ทดสอบตัวนับกับขอบเขต
expression2 ประมวลผลตอนท้ายแต่ละรอบ ตามปกติเป็นชุดคำสั่ง for loop สามารถเขียนแสดงตารางค่าขนส่ง ตามภาพ 2.3 โดยมีคำสั่ง PHP ดังนี้
<?php
for ($distance = 50; $distance <= 250; $distance += 50)
{
echo "<tr>\n <td align = right>$distance</td>\n";
echo " <td align = right>". $distance / 10 ."</td>\n</tr>\n";
}
?>
เมื่อเปรียบเทียบ while loop กับ for loop ในการทำงานแบบเดียวกัน for loop มีความกะทัดรัดมากกว่า โดยประหยัด 2 บรรทัด
do
while loop
ประเภท loop สุดท้าย มีความแตกต่างเล็กน้อย โครงสร้างทั่วไปของประโยคคำสั่ง do while คือ
do
expression;
while (condition);
do
while loop แตกต่างจาก while loop เพราะเงื่อนไขทดสอบตอนท้าย หมายความว่าใน do
while loop ต้องมีการประมวลผลภายใน loop อย่างน้อย 1 ครั้ง
ถึงแม้ว่า เงื่อนไขเป็นเท็จ เมื่อเริ่มต้น และไม่มีทางเป็นจริง loop จะได้รับการประมวลผล 1 ครั้ง ก่อนการตรวจสอบเงื่อนไขและสิ้นสุด
<?
$num = 100;
do
{
echo $num."<br/>";
}
while ($num < 1);
?>
การออกจากโครงสร้างควบคุม
ถ้าต้องการหยุดการประมวลผลคำสั่ง มี 3 วิธี ขึ้นกับผลที่ต้องการ
- ถ้าต้องการหยุดการประมวลผล loop สามารถใช้ประโยคคำสั่ง break ตามการอภิปรายในส่วน switch ถ้าใช้ประโยคคำสั่ง break ใน loop การประมวลผลสคริปต์ จะทำงานบรรทัดต่อไปของ สคริปต์ ต่อจาก loop
- ถ้าต้องการกระโดดไปยังรอบต่อไป สามารถใช้ประโยคคำสั่ง continue
- ถ้าต้องการสิ้นสุดประมวลผลสคริปต์ PHP สามารถใช้ exit ตามปกติใช้เมื่อเกิดความผิดพลาด ตัวอย่างเช่น ใช้ปรับปรุงตัวอย่างก่อนได้ดังนี้
ตัวอย่างการใช้ break และ continue
<?php
$a = 0;
while($a < 1000)
{
$a++;
echo "\$a ขณะนี้ คือ : $a<br/>";
// localtime() ส่งออก array
// ชั่วโมง คือ key / ดัชนี 2, รูปแบบ 24 ชั่วโมง
//
$now = localtime()
if ($now[2] > 15) // เงื่อนไขไม่ทำงานหลัง 15.00 น.
break;
}
// พิมพ์เฉพาะเลขคู่
for ($b = 0; $b < 1000; $b++)
{
if ($b % 2 == 0)
continue;
echo "\$b ขณะนี้ คือ : $b<br/>";
}
for ($x = 0; $x < 10; $x++)
{
echo $x
for($y = 15; $y < 20; $y++)
{
// บอกให้ PHP ออกจาก loop นี้ และต่อ loop นอก
if ($y == 17)
continue 2;
echo $y
}
}
?>
ตัวอย่างการใช้ exit
if ($ totalqty == 0)
{
echo "ท่านไม่ได้ทำรายการสั่งซื้อจากหน้าก่อน<br/>";
exit;
}
การเรียก exit เพื่อหยุด PHP จากการประมวลผลสคริปต์ส่วนที่เหลือ
|