2009-06-05 27 views
5

我一直在尋找這一點,我剛纔好像碰到同樣的文章,在此代碼:

try 
    { 
     //some code 

    } 
    catch(Exception $e){ 
     throw $e; 
    } 

哪裏$é被存儲或網絡管理員怎麼看的呢?我應該尋找一個特殊的功能?

回答

7

從catch {}塊內部拋出的Exception object(在這種情況下,$ e)將被下一個最高try {} catch {}塊捕獲。

這裏的一個傻例如:

try { 
    try { 
     throw new Exception("This is thrown from the inner exception handler."); 
    }catch(Exception $e) { 
     throw $e; 
    } 
}catch(Exception $e) { 
    die("I'm the outer exception handler (" . $e->getMessage() . ")<br />"); 
} 

的上述輸出是

我外的異常處理程序(這是從內部異常處理程序拋出。)

+0

感謝馬克,並原諒我newbiness但怎麼辦我檢查getMessage,以便看到出現什麼錯誤? – jcslzr 2009-06-05 18:02:39

+4

$ e-> getMessage()只是一個返回字符串和錯誤信息的函數。 這裏的示例#1(http://www.php.net/manual/en/language.exceptions.extending.php)有一些有關標準Exception對象中可用的方法的很好的信息。 – 2009-06-05 18:04:40

+1

謝謝,我會檢查它 CS – jcslzr 2009-06-05 18:07:46

1

$e的一個例外或從延伸的任何其他類。這些對象具有一些共同的特定屬性和方法(繼承自例外類),您可以使用它們。有關更多詳細信息,請參閱chapter about exceptionsException member list

1

我假設你使用某種第三方代碼/庫中的代碼,它將拋出異常到你的代碼中。您只需準備好要拋出的異常,然後就可以將其記錄/顯示出來,無論您想要什麼。

try { 
    $Library->procedure(); 
catch(Exception $e) { 
    echo $e->getMessage(); //would echo the exception message. 
} 

欲瞭解更多信息,請閱讀PHP手冊的條目Exceptions

1

的線條:

catch(Exception $e){ 
    throw $e; 
} 

唐\ t是有意義的。當你發現一個異常你想做些什麼不同之處,如:

catch(Exception $e){ 
    error_log($e->getMessage()); 
    die('An error has occurred'); 
} 

但在你的情況下,異常直接拋給這將已經發生的外層的try塊。
如果你改變你的代碼:

//some code 

會產生完全相同的行爲。

5

一件好事就是Exception實現__toString()並輸出一個調用堆棧跟蹤。

因此,在低級別的例外,我知道我會想看看我是如何走到,在catch(有時候)我根本就

error_log($e);