2013-02-11 82 views
0

如何處理PHP中的異常?作爲一個例子,在這樣的代碼:這個PHP中的異常處理?

<?php 
    $a=5; 
    $b=0 
    $c=($a/$b); 
    echo $c; 
?> 

請幫助我。

+0

可能重複[PHP:例外與錯誤?](http://stackoverflow.com/questions/841500/php-exceptions-vs-errors)。確保你檢查了所有答案。 – 2013-02-11 10:18:00

+0

默認情況下,這會引發警告而不是例外。 – Niko 2013-02-11 10:18:57

回答

1

PHP不會拋出異常而引發警告和錯誤消息,因此您無法在此處找到任何東西。但是,您可以修改此行爲:

// Register a custom error handler that throws an ErrorException 
// whenever a warrning or error occurs 
set_error_handler(function ($errno, $errstr, $errfile, $errline) { 
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline); 
}); 

$a = 5; 
$b = 0; 

// Now a division by zero will result into an ErrorException being thrown 
try { 
    $c = $a/$b; 
    echo $c; 
} catch (ErrorException $e) { 
    echo 'Error: ' . $e->getMessage(); 
} 
+0

它的工作。但是如果你解釋了set_error_handler(函數($ errno,$ errstr,$ errfile,$ errline){0},則拋出新的ErrorException($ errstr,0,$ errno,$ errfile,$ errline); });那麼它會清除我的理解。謝謝。 – ripa 2013-02-11 10:47:47

+0

這會註冊一個自定義錯誤處理程序 - 默認情況下,PHP會將錯誤消息記錄或打印到屏幕上。通過註冊一個自定義錯誤處理程序,您告訴PHP您希望以不同方式處理錯誤消息。 PHP然後調用錯誤處理程序而不是輸出消息。在這種情況下,錯誤處理程序會引發異常,即將錯誤消息轉換爲異常。 – Niko 2013-02-11 16:01:13

-1

第一個:您正在第二行代碼(它可以被零分割)進行分割。

第二個:由於拋出錯誤,不需要在方法中返回false。

第三:爲什麼在這裏使用一個異常,而不僅僅是讓你的方法在執行devision之前返回true和false。

第四:爲什麼有一個方法,如果你只需要檢查$ y的值。調用方法或包含if語句只需要一行代碼。

那麼,爲什麼不能只是像:

case '/':     
    if($b > 0) 
     $prod = $a/$b; 
    break; 
0

據我所知PHP不會被零扔在分裂異常。我測試了5.3,它觸發了一個警告,所有更小的版本。所以把它放在try塊中不會做任何事情。您可以使用ErrorException類將PHP錯誤映射爲Exceptions,並且可以使用錯誤和異常處理程序進行調試。請參閱https://github.com/sam-at-github/php_error_exceptions,以獲取有關擰緊的參考實現。