ข้ามไปยังเนื้อหาหลัก
คู่มือระบบ เนื้อหาผ่านการตรวจสอบแล้ว

Error Handling เบื้องต้น: Try-Catch

บทความนี้แนะนำการจัดการข้อผิดพลาด (Error Handling) ใน PHP ด้วยโครงสร้าง `try-catch` ซึ่งช่วยให้โปรแกรมสามารถดักจับและจัดการกับข้อผิดพลาดที่อาจเกิดขึ้นระหว่างการ...

Error Handling เบื้องต้น: Try-Catch

ในโลกของการเขียนโปรแกรม ไม่มีอะไรแน่นอน! บางครั้งโปรแกรมของเราก็อาจจะเจอกับปัญหาที่ไม่คาดคิด หรือที่เรียกว่า "Error" การจัดการ Error หรือ Error Handling จึงเป็นสิ่งสำคัญมาก เพื่อให้โปรแกรมของเราทำงานได้อย่างราบรื่น แม้ว่าจะเจอปัญหาที่ไม่คาดฝันก็ตาม

บทนี้เราจะมาเรียนรู้ Error Handling แบบง่ายๆ ด้วย try-catch ซึ่งเป็นเครื่องมือพื้นฐานแต่ทรงพลังในการจัดการกับ Error ใน PHP

Error คืออะไร?

Error คือสิ่งที่เกิดขึ้นเมื่อโปรแกรมของเราไม่สามารถทำงานตามที่คาดหวังไว้ได้ อาจจะเกิดจากหลายสาเหตุ เช่น:

  • การหารด้วยศูนย์
  • การพยายามเปิดไฟล์ที่ไม่มีอยู่จริง
  • การเข้าถึง Array Index ที่ไม่มี
  • การเรียกใช้งาน Method ของ Object ที่เป็น Null

ถ้าเราไม่จัดการกับ Error เหล่านี้ โปรแกรมของเราอาจจะหยุดทำงาน หรือแสดงข้อความ Error ที่ไม่เป็นมิตรต่อผู้ใช้งาน

Try-Catch คืออะไร?

try-catch เป็นโครงสร้างควบคุม (Control Structure) ที่ช่วยให้เราสามารถ "ดักจับ" Error ที่อาจจะเกิดขึ้นในโปรแกรมของเราได้ โดยการ:

  • try: กำหนดส่วนของโค้ดที่เราคาดว่าอาจจะเกิด Error
  • catch: กำหนดส่วนของโค้ดที่จะทำงานเมื่อเกิด Error ใน try block

รูปแบบการใช้งาน Try-Catch

รูปแบบการใช้งาน try-catch ใน PHP มีดังนี้:

try {
  // โค้ดที่อาจจะเกิด Error
} catch (Exception $e) {
  // โค้ดที่จะทำงานเมื่อเกิด Error
}

อธิบาย:

  • try { ... }: เราใส่โค้ดที่เราคิดว่าอาจจะเกิด Error ลงใน try block
  • catch (Exception $e) { ... }: ถ้าเกิด Error ใน try block, PHP จะ "โยน" (throw) สิ่งที่เรียกว่า "Exception" ออกมา catch block จะทำหน้าที่ "จับ" Exception นั้นไว้ โดย Exception $e คือการบอกว่าเราจะจับ Exception ที่เป็น Class Exception หรือ Class ที่สืบทอดมาจาก Exception และเก็บ Object Exception นั้นไว้ในตัวแปร $e

ตัวอย่างการใช้งาน Try-Catch

ลองดูตัวอย่างการหารด้วยศูนย์:

<?php

$numerator = 10;
$denominator = 0;

try {
  $result = $numerator / $denominator; // อาจจะเกิด Error เพราะหารด้วย 0
  echo "ผลลัพธ์คือ: " . $result;
} catch (Exception $e) {
  echo "เกิดข้อผิดพลาด: ไม่สามารถหารด้วยศูนย์ได้";
}

echo "<br>โปรแกรมยังทำงานต่อได้!";

?>

อธิบาย:

  • เรากำหนดตัวแปร $numerator เป็น 10 และ $denominator เป็น 0
  • ใน try block เราพยายามหาร $numerator ด้วย $denominator ซึ่งจะทำให้เกิด Error (Division by zero)
  • เมื่อเกิด Error, PHP จะโยน Exception ออกมา
  • catch (Exception $e) { ... } จะจับ Exception นั้นไว้ และทำงานใน catch block
  • ใน catch block เราแสดงข้อความ "เกิดข้อผิดพลาด: ไม่สามารถหารด้วยศูนย์ได้"
  • ถึงแม้จะเกิด Error, โปรแกรมของเราก็ยังทำงานต่อได้ (แสดงข้อความ "โปรแกรมยังทำงานต่อได้!") เพราะเราได้จัดการ Error ด้วย try-catch แล้ว

Exception Object

ใน catch block เราสามารถเข้าถึงข้อมูลเกี่ยวกับ Error ที่เกิดขึ้นได้ ผ่านทาง Exception object (ในตัวอย่างคือ $e) Exception object มี Methods ที่มีประโยชน์หลายอย่าง เช่น:

  • getMessage(): คืนค่าข้อความอธิบาย Error
  • getCode(): คืนค่า Error Code
  • getFile(): คืนค่าชื่อไฟล์ที่เกิด Error
  • getLine(): คืนค่าหมายเลขบรรทัดที่เกิด Error

ตัวอย่างการใช้งาน Exception object:

<?php

$numerator = 10;
$denominator = 0;

try {
  $result = $numerator / $denominator;
  echo "ผลลัพธ์คือ: " . $result;
} catch (Exception $e) {
  echo "เกิดข้อผิดพลาด: " . $e->getMessage() . "<br>";
  echo "ไฟล์: " . $e->getFile() . "<br>";
  echo "บรรทัด: " . $e->getLine() . "<br>";
}

echo "<br>โปรแกรมยังทำงานต่อได้!";

?>

ตัวอย่างผลลัพธ์:

เกิดข้อผิดพลาด: Division by zero
ไฟล์: /path/to/your/file.php
บรรทัด: 6

โปรแกรมยังทำงานต่อได้!

Catch หลาย Exception

เราสามารถมี catch block หลายอัน เพื่อจับ Exception ที่แตกต่างกันได้ ตัวอย่าง:

<?php

try {
  // โค้ดที่อาจจะเกิด Exception หลายแบบ
  if (file_exists("myfile.txt")) {
    $file = fopen("myfile.txt", "r");
    if (!$file) {
      throw new Exception("ไม่สามารถเปิดไฟล์ได้!");
    }
    fclose($file);
  } else {
    throw new Exception("ไฟล์ myfile.txt ไม่พบ!");
  }
} catch (FileNotFoundException $e) {
  echo "เกิดข้อผิดพลาด: ไฟล์ไม่พบ";
} catch (FileOpenException $e) {
  echo "เกิดข้อผิดพลาด: ไม่สามารถเปิดไฟล์ได้";
} catch (Exception $e) {
  echo "เกิดข้อผิดพลาดทั่วไป: " . $e->getMessage();
}

?>

ในตัวอย่างนี้ เราสมมติว่าเรามี Custom Exception ชื่อ FileNotFoundException และ FileOpenException (เราจะเรียนรู้วิธีสร้าง Custom Exception ในบทถัดไป) ถ้าเกิด FileNotFoundException จะเข้า catch block แรก, ถ้าเกิด FileOpenException จะเข้า catch block ที่สอง และถ้าเกิด Exception อื่นๆ ที่ไม่ใช่สอง Exception นี้ จะเข้า catch block สุดท้ายที่จับ Exception ทั่วไป

ข้อควรจำ: ลำดับของ catch block สำคัญมาก! catch block ที่จับ Exception ที่เฉพาะเจาะจงกว่า ควรอยู่ก่อน catch block ที่จับ Exception ที่ทั่วไปกว่า

สรุป

try-catch เป็นเครื่องมือสำคัญในการจัดการ Error ใน PHP ช่วยให้โปรแกรมของเราทำงานได้อย่างราบรื่น แม้ว่าจะเจอปัญหาที่ไม่คาดฝัน การเข้าใจและใช้งาน try-catch อย่างถูกต้อง จะช่วยให้เราเขียนโปรแกรมที่แข็งแกร่งและเชื่อถือได้มากขึ้น

ในบทถัดไป เราจะเรียนรู้เกี่ยวกับการโยน Exception ด้วย throw และการสร้าง Custom Exception ของเราเอง

Office.in.th Custom Service

ต้องการพัฒนาระบบหรือปรับแต่งจากโครงสร้างนี้?

Office.in.th รับพัฒนาและออกแบบ Enterprise Web Application, API Integration และระบบบริหารงานภาครัฐ/เอกชน พร้อมการสนับสนุนระยะยาว

ดูบริการรับพัฒนาซอฟต์แวร์