แนะนำตัว
อินเทอร์เฟซ 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