แนะนำตัว
อินเทอร์เฟซ Throwable ถูกใช้งานโดยคลาส Error และ Exception คลาส Error ที่กำหนดไว้ล่วงหน้าทั้งหมดนั้นสืบทอดมาจากคลาส Error อินสแตนซ์ของคลาสข้อผิดพลาดที่เกี่ยวข้องถูกส่งออกไปในบล็อกการลองและประมวลผลภายในบล็อกการดักจับที่เหมาะสม
ข้อผิดพลาดในการโยน
การดำเนินการปกติ (เมื่อไม่มีข้อยกเว้นเกิดขึ้นภายในบล็อกการลอง) จะดำเนินการต่อไปหลังจากบล็อก catch ล่าสุดที่กำหนดไว้ตามลำดับ
ตัวอย่าง
<?php function div($x, $y) { if (!$y) { throw new Exception('Division by zero.'); } return $x/$y; } try { echo div(10,5) . "\n"; echo div(10,0) . "\n"; } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } // Continue execution echo "Execution continues\n"; ?>
ผลลัพธ์
ผลลัพธ์ต่อไปนี้จะปรากฏขึ้น
2 Caught exception: Division by zero. Execution continues
ในตัวอย่างต่อไปนี้ TypeError ถูกส่งออกไปในขณะที่เรียกใช้ฟังก์ชันเนื่องจากอาร์กิวเมนต์ที่เหมาะสมจะไม่ถูกส่งผ่านไป ข้อความแสดงข้อผิดพลาดที่สอดคล้องกันจะปรากฏขึ้น
ตัวอย่าง
<?php function add(int $num1, int $num2){ return $num1 + $num2; } try { $value = add(1, 'one'); } catch (TypeError $e) { echo $e->getMessage(). "\n"; } ?>
ผลลัพธ์
ผลลัพธ์ต่อไปนี้จะปรากฏขึ้น
Argument 2 passed to add() must be of the type integer, string given
ข้อยกเว้น SPL
ไลบรารี PHP มาตรฐานมีข้อยกเว้นที่กำหนดไว้ล่วงหน้า
LogicException | ข้อยกเว้นที่แสดงข้อผิดพลาดในตรรกะของโปรแกรม |
BadFunctionCallException | มีข้อยกเว้นเกิดขึ้นหากการเรียกกลับอ้างอิงถึงฟังก์ชันที่ไม่ได้กำหนดไว้หรือมีข้อโต้แย้งขาดหายไป |
BadMethodCallException | มีข้อยกเว้นเกิดขึ้นหากการเรียกกลับอ้างอิงถึงเมธอดที่ไม่ได้กำหนดไว้ หรืออาร์กิวเมนต์บางตัวขาดหายไป |
DomainException | มีข้อยกเว้นเกิดขึ้นหากค่าไม่เป็นไปตามโดเมนข้อมูลที่ถูกต้องที่กำหนดไว้ |
InvalidArgumentException | มีข้อยกเว้นเกิดขึ้นหากอาร์กิวเมนต์ไม่ใช่ประเภทที่คาดไว้ |
LengthException | มีข้อยกเว้นหากความยาวไม่ถูกต้อง |
OutOfRangeException | มีข้อยกเว้นเมื่อมีการร้องขอดัชนีที่ไม่ถูกต้อง |
RuntimeException | มีข้อยกเว้นเกิดขึ้นหากเกิดข้อผิดพลาดซึ่งพบได้เฉพาะในรันไทม์ |
OutOfBoundsException | มีข้อยกเว้นเกิดขึ้นหากค่าไม่ใช่คีย์ที่ถูกต้อง |
OverflowException | มีข้อยกเว้นเมื่อเพิ่มองค์ประกอบลงในคอนเทนเนอร์แบบเต็ม |
RangeException | แสดงข้อยกเว้นเพื่อระบุข้อผิดพลาดของช่วงระหว่างการทำงานของโปรแกรม ข้อผิดพลาดทางคณิตศาสตร์อื่นที่ไม่ใช่ under/overflow |
UnderflowException | มีข้อยกเว้นเกิดขึ้นเมื่อดำเนินการที่ไม่ถูกต้องในคอนเทนเนอร์ที่ว่างเปล่า เช่น การนำองค์ประกอบออก |
UnexpectedValueException | มีข้อยกเว้นเกิดขึ้นหากค่าไม่ตรงกับชุดของค่า |
ตัวอย่างต่อไปนี้แสดง OutOfBoundsException ส่งเมื่อไม่พบคีย์ในอาร์เรย์ PHP
ตัวอย่าง
<?php $arr=array("one"=>1, "two"=>2,"three"=>3,"four"=>4); $key="ten"; try{ if (array_key_exists($key, $arr)==FALSE){ throw new OutOfBoundsException("key not found");} else { echo $arr[$key];} } catch (OutOfBoundsException $e){ echo $e->getMessage(). "\n"; } ?>
ผลลัพธ์
ผลลัพธ์ต่อไปนี้จะปรากฏขึ้น
key not found