Hướng dẫn php custom exception class - lớp ngoại lệ tùy chỉnh php

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.

Nội dung chính ShowShow

  • Hàm die() và exit()
  • throw và lớp Exception
  • Sử dụng try ... catch ... để bắt ngoại lệ
  • Tạo các Exception riêng
  • Tạo exception_handler và error_handler riêng
  • set_exception_handler
  • set_error_handler

Hàm die() và exit()

throw và lớp Exception

exit ([$status])
//hoặc
exit ( int $status )

Sử dụng try ... catch ... để bắt ngoại lệ

Tạo các Exception riêng

<?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

?>

throw và lớp Exception

Sử dụng try ... catch ... để bắt ngoại lệErrorException, ), trong PHP7 còn có thêm

<?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

?>
6 Sau đó để phát sinh ngoại lệ để chương trình chuyển hướng theo ngoại lệ bạn cần cú pháp
<?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

?>
7, các lệnh tiếp sau
<?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

?>
8 trong một block sẽ không được thi hành.

Tạo các Exception riêng

<?
    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 ...
?>

Tạo exception_handler và error_handler riêng

Sử dụng try ... catch ... để bắt ngoại lệ

Tạo các Exception riêng

try 
{
    //Khối lệnh mà có thể phát sinh Exception
} 
catch (Exception $e) 
{    
    //Khối lệnh bắt được Exception
}

Tạo exception_handler và error_handler riêng

Hàm

<?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

?>
0 và
<?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

?>
1 là tương đương nhau. Gọi hàm này để dừng chương trình ngay lập tức. Cú pháp gọi hàm này 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();
} 

<?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

?>
2 là dòng trạng thái in ra trước khi thoát. Hoặc là một số nguyên được hiểu là trang thái khi thoát (0 - 255).
<?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

?>
3 cho biết chương trình thoát ra một cách bình thường (không lỗ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();
} 

Ví dụ, nếu không mở được file thì kết thúc chương trình:

<?php
try {
    //...
} catch (Exception $e) {
    //...
} finally {
    //...Code luôn thi hành
}

Tạo các Exception riêng

Tạo exception_handler và error_handler riêng

<?
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êng

Hàm <?php $filename = '/path/to/data-file'; $file = fopen($filename, 'r') or exit("unable to open file ($filename)"); ?>0 và <?php $filename = '/path/to/data-file'; $file = fopen($filename, 'r') or exit("unable to open file ($filename)"); ?>1 là tương đương nhau. Gọi hàm này để dừng chương trình ngay lập tức. Cú pháp gọi hàm này như sau:

<?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

?>
2 là dòng trạng thái in ra trước khi thoát. Hoặc là một số nguyên được hiểu là trang thái khi thoát (0 - 255).
<?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

?>
3 cho biết chương trình thoát ra một cách bình thường (không lỗi).

<?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_handler

Ví dụ, nếu không mở được file thì kết thúc chương trình:

<?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");

Khi 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

<?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

?>
4 hoặc một lớp nào đó mà kế thừa từ
<?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

?>
4 như (ErrorException, ), trong PHP7 còn có thêm
<?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

?>
6 Sau đó để phát sinh ngoại lệ để chương trình chuyển hướng theo ngoại lệ bạn cần cú pháp
<?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

?>
7, các lệnh tiếp sau
<?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

?>
8 trong một block sẽ không được thi hành.