2016-11-25 12 views
1

私がしたいことは、PHPファイルが存在しない場合は、errorと表示してください。 しかし、それは動作しません...なぜtry catchは動作しませんか?私は間違って何をしていますか? (PHP)

私は間違って何ですか?

これはPHPでtry catchでうまく動作しませんか?

+0

使用 'file_exists()'とは '例外をthrow'? – Qirel

+0

getContent()はスローされますか? – marekful

+0

try catchブロック内で作成された変数は、それらの外側でアクセスできませんか?私は本当に知りません。 – Phiter

答えて

1

失敗したインクルードが例外をスローしないため、警告がスローされます。そのため、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(); 
} 

対象のファイルが存在しない場合、それはあなたの出力$content変数で

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

ます。その後、

リファレンス

+0

私はこれを答えとして受け入れますが、実際にはtry catchはC#のような言語で動作すると思っています。何かが動かないと例外がスローされます。 –

+0

PHPには複数のタイプのエラーがありますが、すべてが例外ではありません。通知、警告(これらの2つは無視することができます)、例外(キャッチ可能)、致命的なエラー(実行を停止する)があります。だから、例外として(try/catchで)何かを処理したい場合は、特に例外をスローする必要があります。あなたは 'include'とは違って' require'を持っていますが、それはキャッチ可能ではない「致命的なエラー」を投げます(私は間違いかもしれませんが、デフォルトではそうではありません)。 – Qirel

1

「エラー」を返し、実際の例外メッセージを表示する代わりに、この行があなたの代わりになることを希望する場合$ content = 'エラー';

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

この場合、関数はメッセージエラー文字列を含む$ contentを返します。

関連する問題