2016-11-25 104 views
1
function TriggerContent($c, $db){ 
    try { 
     include 'pages/' . $c . '.php'; 
     $content= getContent(); 
    } catch (Exception $e){ 
     $content = 'Error'; 
    } 
    return $content; 
} 

我想要的是顯示error如果php文件不存在。 但它不起作用...爲什麼試試catch不工作?我究竟做錯了什麼? (php)

我在做什麼錯?

或者這只是不適合嘗試趕上PHP?

+0

使用'file_exists()'然後'throw'異常? – Qirel

+0

getContent()拋出? – marekful

+0

是否在裏面創建變量try catch塊在他們之外不可訪問?我真的不知道, – Phiter

回答

1

它不起作用,因爲失敗的include不會引發異常,它會引發警告。因此,catch塊永遠不會執行,因爲只有在出現異常時纔會輸入它。你可以檢查文件是否存在,如果不存在,則拋出異常。

try { 
    $page = 'pages/' . $c . '.php'; 

    if (!file_exists($page)) 
     throw new Exception('File does not exist: ['.$page.']'); 

    include $page; 
    $content = getContent(); 

} catch (Exception $e){ 
    $content = 'Error: '.$e->getMessage(); 
} 

如果目標文件不存在,它會輸出

Error: File does not exist: [path-to-file]

$content變量。

參考

+0

我會接受這個答案,但我其實想想try catch會像C#這樣的語言一樣工作,如果某些東西不起作用,它總會拋出一個異常...... –

+0

PHP有多種類型的錯誤,並非一切都是例外。你有通知,警告(這兩個*「可以」*被忽略),異常(可被捕獲)以及致命錯誤(停止執行)。所以如果你想把某些東西當作異常處理(在try/catch中),你必須特別拋出異常。你也有'require'而不是'include',但是會拋出一個「致命錯誤」,這是不可捕捉的(我可能是錯的,但不是默認情況下)。 – Qirel

1

如果您返回'錯誤'並希望改爲看到實際的異常消息,則此行應取代您的$ content ='錯誤';

$content = 'Caught exception: '.$e->getMessage(); 

然後你的函數將返回$ content,包括消息錯誤字符串。