Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

PHP โยนข้อยกเว้น


แนะนำตัว

อินเทอร์เฟซ 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