Kodokon kodokon.com

เงื่อนไขและลูป

ทำให้สคริปต์ของคุณตอบสนองด้วย if และ match แล้วทำงานซ้ำ ๆ ด้วย for, foreach และ while

9 นาที · 3 คำถาม

เปิดบทเรียนนี้ใน Kodokon

เงื่อนไข (condition) ช่วยให้สคริปต์เลือกเส้นทางได้ “ถ้าสิ่งนี้เป็นจริง ให้ทำสิ่งนั้น มิฉะนั้นให้ทำอีกอย่าง” คำสงวน if ทดสอบนิพจน์ที่ให้ผลเป็น true หรือ false โดยใช้ ตัวดำเนินการเปรียบเทียบ ได้แก่ > (มากกว่า), < (น้อยกว่า), >=, <=, === (เท่ากัน ทั้งค่าและชนิดเดียวกัน) และ !== (ไม่เท่ากัน) elseif เพิ่มการทดสอบอีกอันหากอันก่อนหน้าไม่ผ่าน และ else จะทำงานเมื่อไม่มีการทดสอบใดสำเร็จ การทดสอบอ่านจากบนลงล่าง อันแรกที่เป็นจริงจะชนะ

PHP
<?php

$temperature = 12;

if ($temperature > 25) {
    echo "It's hot.";
} elseif ($temperature > 15) {
    echo "It's mild.";
} else {
    echo "Grab a jacket!";
}
ในที่นี้ มีเพียงบล็อก else ที่ทำงาน

เมื่อคุณเปรียบเทียบตัวแปรเดียวกันกับค่าเฉพาะหลาย ๆ ค่า นิพจน์ match จะดูสง่างามกว่า มันเปรียบเทียบตัวแปรกับแต่ละกรณี (การเปรียบเทียบอย่างเข้มงวด ทั้งค่าและชนิด) แล้ว คืนค่ากลับมาโดยตรง ซึ่งคุณสามารถเก็บไว้ในตัวแปรได้ กรณี default ทำหน้าที่เป็นตาข่ายนิรภัยเมื่อไม่มีค่าใดตรงกัน

PHP
<?php

$day = "saturday";

$message = match ($day) {
    "saturday", "sunday" => "It's the weekend!",
    "monday" => "Hang in there, back to work.",
    default => "Have a good weekday.",
};

echo $message;
match คืนค่ากลับมา ซึ่งในที่นี้เก็บไว้ใน $message

ลูป (loop) ทำบล็อกคำสั่งซ้ำหลาย ๆ ครั้งโดยไม่ต้องคัดลอกโค้ด ลูป for เหมาะอย่างยิ่งเมื่อคุณทราบจำนวนรอบล่วงหน้า มันอ่านได้เป็นสามส่วนที่คั่นด้วยเครื่องหมายอัฒภาค ได้แก่ จุดเริ่มต้น ($i = 1), เงื่อนไขในการทำงานต่อ ($i <= 5 ลูปจะทำงานต่อไปตราบเท่าที่เงื่อนไขนี้เป็นจริง) และขั้น ($i++ ซึ่งบวก 1 ให้ $i ในแต่ละรอบ)

PHP
<?php

for ($i = 1; $i <= 5; $i++) {
    echo "Round number {$i}<br>";
}
ห้ารอบ ตั้งแต่ 1 ถึง 5 รวมทั้งสองค่า

ยังมีลูปอีกสองแบบที่เติมเต็มกล่องเครื่องมือ foreach วนผ่าน อาร์เรย์ (array) (รายการของค่า ซึ่งจะกล่าวถึงในบทถัดไป) แล้วส่งสมาชิกแต่ละตัวให้คุณทีละตัว while ทำบล็อกซ้ำ ตราบเท่าที่ เงื่อนไขยังคงเป็นจริง คุณเองต้องเป็นคนเปลี่ยนสถานการณ์ภายในลูปเพื่อให้มันหยุดในที่สุด

PHP
<?php

$fruits = ["apple", "pear", "kiwi"];

foreach ($fruits as $fruit) {
    echo "Fruit: {$fruit}<br>";
}

$countdown = 3;

while ($countdown > 0) {
    echo "{$countdown}...<br>";
    $countdown--;
}

echo "Go!";
foreach วนผ่านรายการ ส่วน while นับถอยหลัง

ทดสอบความรู้

ตรวจสอบว่าคุณจำประเด็นสำคัญของบทเรียนนี้ได้ครบถ้วน

  1. บล็อก else ทำงานเมื่อใด?
    • ทำงานเสมอ ทันทีหลังบล็อก if
    • เฉพาะเมื่อไม่มีเงื่อนไขก่อนหน้าใดเป็นจริง
    • เฉพาะเมื่อเงื่อนไข if เป็นจริง
  2. อะไรคือสิ่งหนึ่งที่ทำให้ match ต่างจาก if?
    • มันคืนค่ากลับมาโดยตรง
    • มันเปรียบเทียบได้แค่ตัวเลขเท่านั้น
    • มันรันทุกกรณีทีละอันต่อเนื่องกัน
  3. จะเกิดอะไรขึ้นถ้าเงื่อนไขของ while เป็นจริงตลอดไป?
    • ลูปหยุดเองโดยอัตโนมัติหลังจาก 100 รอบ
    • PHP ข้ามลูปไปแล้วทำงานต่อ
    • ลูปทำงานไม่รู้จบและทำให้สคริปต์ค้าง