2011-01-19 42 views
10

Tôi muốn tự xử lý các ngoại lệ trong ứng dụng php của mình.Xử lý ngoại lệ tùy chỉnh php

Khi tôi ném ngoại lệ, tôi muốn chuyển theo tiêu đề được sử dụng trong trang lỗi.

Ai đó có thể xin vui lòng liên kết tôi đến một hướng dẫn tốt, hoặc viết một lời giải thích rõ ràng về cách thức xử lý ngoại lệ thực sự hoạt động (ví dụ như làm thế nào để biết những gì sắp xếp ngoại lệ mà bạn đang đối phó với vv.

Trả lời

29

Tài liệu chính thức là nơi tốt để bắt đầu - http://php.net/manual/en/language.exceptions.php.

Nếu đó chỉ là một thông báo mà bạn muốn chụp, bạn sẽ làm điều đó theo các bước sau;

try{ 
    throw new Exception("This is your error message"); 
}catch(Exception $e){ 
    print $e->getMessage(); 
} 

Nếu bạn muốn chụp các lỗi cụ thể mà bạn sẽ sử dụng:

try{ 
    throw new SQLException("SQL error message"); 
}catch(SQLException $e){ 
    print "SQL Error: ".$e->getMessage(); 
}catch(Exception $e){ 
    print "Error: ".$e->getMessage(); 
} 

Đối với hồ sơ - bạn cần phải xác định SQLException. Điều này có thể được thực hiện đơn giản như:

class SQLException extends Exception{ 

} 

Đối với một danh hiệu và thông điệp của bạn sẽ mở rộng các lớp Exception:

class CustomException extends Exception{ 

    protected $title; 

    public function __construct($title, $message, $code = 0, Exception $previous = null) { 

     $this->title = $title; 

     parent::__construct($message, $code, $previous); 

    } 

    public function getTitle(){ 
     return $this->title; 
    } 

} 

Bạn có thể gọi này bằng:

try{ 
    throw new CustomException("My Title", "My error message"); 
}catch(CustomException $e){ 
    print $e->getTitle()."<br />".$e->getMessage(); 
} 
+1

Cảm ơn bạn, câu trả lời này là tuyệt vời. Với ví dụ này trong tâm trí, nếu tôi muốn vượt qua cùng một tiêu đề cũng như chỉ là thông điệp với ngoại lệ làm thế nào tôi sẽ làm điều đó? – Hailwood

+5

W3Schools không thuộc sở hữu của W3C và thực sự là tài nguyên kém, hãy xem http://w3fools.com để biết thông tin – BoltClock

+0

Xin lỗi, tôi đã bỏ lỡ phần 'trường học'. Tuy nhiên tôi đã nghĩ rằng hướng dẫn của họ về xử lý ngoại lệ là một giới thiệu đủ phong nha nhưng tôi sẽ chỉnh sửa và thay đổi thành tài liệu chính thức, để nhất quán. –

3

Trước tiên, tôi muốn Ngoài ra, bạn có thể xem trang Extending Exceptions - có thêm một số thông tin về lớp ngoại lệ tiêu chuẩn và ví dụ về triển khai ngoại lệ tùy chỉnh. , làm thế nào để làm một số hành động cụ thể nếu ngoại lệ của loại cụ thể đã được ném, sau đó bạn chỉ cần xác định loại ngoại lệ trong báo cáo khai thác:

try { 
     //do some actions, which may throw exception 
    } catch (MyException $e) { 
     // Specific exception - do something with it 
     // (access specific fields, if necessary) 
    } catch (Exception $e) { 
     // General exception - log exception details 
     // and show user some general error message 
    } 
2

Hãy thử điều này như là điều đầu tiên trên trang php của bạn (s).

Nó nắm bắt các lỗi và ngoại lệ của php.

function php_error($input, $msg = '', $file = '', $line = '', $context = '') { 
    if (error_reporting() == 0) return; 

    if (is_object($input)) { 
     echo "<strong>PHP EXCEPTION: </strong>"; 
     h_print($input); 
     $title = 'PHP Exception'; 
     $error = 'Exception'; 
     $code = null; 
    } else { 
     if ($input == E_STRICT) return; 
     if ($input != E_ERROR) return; 
     $title = 'PHP Error'; 
     $error = $msg.' in <strong>'.$file.'</strong> on <strong>line '.$line.'</strong>.'; 
     $code = null; 
    } 

    debug($title, $error, $code); 

} 

set_error_handler('php_error'); 
set_exception_handler('php_error');