2010-07-04 51 views
1

場景:我有一個擴展另一個類的類,但父類未定義(無論出於何種原因)。我正在嘗試獲取子類的ReflectionClass。當我這樣做時,我在父類上得到了一個Class Not Found異常。但是,我無法理解這個例外。我究竟做錯了什麼?未找到父類時捕捉反射異常

例如...

<?php 
class Foo extends Bar { } 

try 
{ 
    $class = new ReflectionClass('Foo'); 
    echo 'I\'ve reflected "Foo" successfully!'; 
} 
catch (Exception $e) 
{ 
    echo 'My exception handler'; 
} 

上述代碼的結果是這個類的欄「未發現異常的打印輸出。爲什麼我的catch語句沒有發現異常?

感謝, 凱爾

+0

您的PHP版本?我得到了致命錯誤:第2行找不到條形碼 – erenon 2010-07-04 14:36:19

+0

5.3 類定義通常位於自動加載程序包含的另一個文件中。我會認爲,由於試圖實例化它的ReflectionClass而導致自動加載器包含文件時遇到的任何異常都會被我的try-catch塊捕獲。也許不是...... – vimofthevine 2010-07-04 14:41:54

回答

0

這是因爲發生在這條線上,而不是try後的線路異常:

class Foo extends Bar { } 

我試了一下,穿上try-catch類的聲明將無法工作太。確保首先包含Bar

+0

有沒有辦法在包含具有'Foo'類聲明的文件時捕獲異常?這是爲了生成類文檔,所以不需要有效和可運行,只要能夠識別類何時無效(即,父類未定義)即可。有沒有辦法做到這一點? – vimofthevine 2010-07-04 23:14:01

+0

處理致命錯誤有點棘手。 [見這裏](http://stackoverflow.com/questions/277224/how-do-i-catch-a-php-fatal-error)。如果是我,我可能會打開並解析包含的文件(即Foo.php)作爲文本文件,並通過代碼來查找'擴展Bar'並用[class_exists]檢查它是否存在(http:/ /php.net/manual/en/function.class-exists.php)。 – Shiki 2010-07-05 00:22:20