Phần này trình bày các vấn đề liên quan đến Error và Exception trong PHP. PHP có cung cấp các cơ chế giúp bắt lỗi, giám sát các lỗi và xử lý các lỗi có thể xảy ra khi lập trình. Show Hàm die() và exit()Hàm exit ([$status]) //hoặc exit ( int $status )
Ví dụ, nếu không mở được file thì kết thúc chương trình: <?php $filename = '/path/to/data-file'; $file = fopen($filename, 'r') or exit("unable to open file ($filename)"); ?> throw và lớp ExceptionKhi lập trình, bạn cần phát sinh các ngoại lệ thì bạn cần tạo một đối tượng ngoại lệ từ lớp Ví dụ hàm sau phát sinh một ngoại lệ Exception, nếu số đó là 0 và một ngoại lệ khác là ErrorException nếu số đó nhỏ hơn 0. <? function cal($number) { if ($number <0 ) { $exception = new Exception('Lỗi do số nhỏ hơn 0'); throw $exception; } else if ($number == 0 ) { $exception = new ErrorException('Lỗi do số bằng 0'); throw $exception; } return ++$number; } cal(-1); //Chạy hàm trên PHP hiện thị thông báo lỗi ... ?> Khi có đoạn code gọi lệnh Sử dụng try ... catch ... để bắt ngoại lệGiờ thay vì để hàm xử lỗi của PHP xử
lý các Exception như trên, bạn muốn bắt các lỗi này ngay trong đoạn code xảy ra lỗi, để xử lý kết thúc hoặc chạy tiếp theo yêu cầu của bạn, lúc này bạn dùng cú pháp lệnh try { //Khối lệnh mà có thể phát sinh Exception } catch (Exception $e) { //Khối lệnh bắt được Exception } Nếu sử dụng code Trở lại ví dụ trên, viết để bắt ngoại lệ như sau: <?php function cal($number) { if ($number <0 ) { $exception = new Exception('Lỗi số nhỏ hơn 0'); throw $exception; } else if ($number == 0 ) { $exception = new ErrorException('Lỗi số bằng 0'); throw $exception; } return ++$number; } try { cal(-1); } catch (Exception $e) { echo $e->getMessage(); } Bạn có thể sử dụng nhiều
khối <?php function cal($number) { if ($number <0 ) { $exception = new Exception('Lỗi số nhỏ hơn 0'); throw $exception; } else if ($number == 0 ) { $exception = new ErrorException('Lỗi số bằng 0'); throw $exception; } return ++$number; } try { cal(0); } catch (Exception $e) { //khối 1 echo 'Lỗi Exception:'; echo $e->getMessage(); } catch (ErrorException $e) { //khối 2 echo 'Lỗi ErrorException:'; echo $e->getMessage(); } Trong cú pháp <?php try { //... } catch (Exception $e) { //... } finally { //...Code luôn thi hành } Tạo các Exception riêngNếu lớp Exception mặc định như Exception, ErrorException chưa đủ dùng cho bạn, bạn có thể tạo ra các Exeption riêng bằng cách kế thừa lớp Exception <? class MyExption extends Exception { //Định nghĩa các hàm riêng của bạn, ví dụ: public function errorMessage() { $errorMsg = 'Lỗi tại dòng '. $this->getLine().' trong file '.$this->getFile(); return $errorMsg; } } ?> //Lúc này MyExption có thể được tạo bằng //$e = new MyExption("Thông báo lỗi"); Tạo exception_handler và error_handler riêngset_exception_handlerKhi ứng dụng phát sinh
ngoại lệ bằng lệnh <?php function exception_handler($exception) { echo "Bắt được lỗi: " , $exception->getMessage(), "\n"; } set_exception_handler('exception_handler'); throw new Exception('Một ngoại lệ phát sinh'); echo "Sau lệnh throw nên không thi hành được\n"; ?> set_error_handlerNgoài các ngoại lệ phát sinh do logic chương trình ra, ứng dụng có thể xảy ra các lỗi nghiêm trọng khác nhau trong
quá trình chạy. Để định nghĩa hàm riêng các lỗi này thì bạn làm như sau: Tạo hàm riêng xử lý lỗi có dạng <?php error_reporting( E_ERROR ); function handleError($errno, $errstr,$error_file,$error_line) { echo "<b>Lỗi:</b> [$errno] $errstr - $error_file: $error_line"; echo "<br />"; echo "Kết thúc!"; die(); } set_error_handler("handleError"); Bạn có thể một framework chuyên về error handler và exception handler whoops |