[英]PHP Try Catch in Exception Handling
我有一個數據庫類dbconnect.php和processform.php。 在dbconnect.php內部,有一種用於連接數據庫的方法。
如果有錯誤,如何拋出異常? 我在哪里將try catch塊放在processform.php中? 人們說我不應該直接在班級內部回應錯誤。 這是一個例子:
<?php
// dbconnect.php
class DbConnect
{
public function open_connection()
{
/* Should I do it like this? */
$this->conn = PDO($dsn, $this->username, $this->password);
if (!$this->conn) {
throw new Exception('Error connecting to the database.');
}
/* Or like this */
try {
$this->conn = PDO($dsn, $this->username, $this->password);
} catch (PDOException $e) {
echo 'Error: ', $e->getMessage(), '<br>';
}
}
?>
// processform.php
<?php
require_once 'dbconnect.php';
$pdo = new DbConnect($host, $username, $password);
try {
$pdo->open_connection();
} catch (PDOException $e) {
echo 'Error connecting to the database.');
}
?>
我真的很想學習在我的代碼中實現try catch的正確方法。
您不必手動拋出異常,尤其是在成功連接時:-)
相反,您需要告訴PDO在出現問題時需要引發異常,並且可以在打開數據庫連接時執行此操作:
$options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
$this->conn = new PDO($dsn, $this->username, $this->password, $options);
現在您可以將所有內容放入try
/ catch
塊中,但這甚至沒有必要; 如果您不這樣做,當您不手動捕獲它們時,php將向您顯示unhandled exceptions
並帶有堆棧跟蹤。
當您決定要為訪問者微調錯誤處理時,可以使用set_exception_handler()
設置自己的異常處理程序。 這樣,您可以在一個地方處理所有內容,而不必將不同的部分包裝在try
/ catch
塊中。 您當然應該喜歡那個嗎?
在我的實踐中,我更喜歡將異常排除在底層。 我的意思是,DbConnect中的第二種方式。
您可以將錯誤消息輸出到錯誤日志。 並將錯誤代碼返回到前端。 因此,前端知道如何以友好的方式告訴用戶錯誤的發生。
此外,您可以使用諸如set_error_handler
/ set_exception_handler
類的全局錯誤處理程序來執行此操作。 錯誤發生時重定向到錯誤頁面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.