私がしたいことは、PHPファイルが存在しない場合は、error
と表示してください。 しかし、それは動作しません...なぜtry catchは動作しませんか?私は間違って何をしていますか? (PHP)
私は間違って何ですか?
これはPHPでtry catchでうまく動作しませんか?
私がしたいことは、PHPファイルが存在しない場合は、error
と表示してください。 しかし、それは動作しません...なぜtry catchは動作しませんか?私は間違って何をしていますか? (PHP)
私は間違って何ですか?
これはPHPでtry catchでうまく動作しませんか?
失敗したインクルードが例外をスローしないため、警告がスローされます。そのため、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]
ます。その後、
リファレンス
私はこれを答えとして受け入れますが、実際にはtry catchはC#のような言語で動作すると思っています。何かが動かないと例外がスローされます。 –
PHPには複数のタイプのエラーがありますが、すべてが例外ではありません。通知、警告(これらの2つは無視することができます)、例外(キャッチ可能)、致命的なエラー(実行を停止する)があります。だから、例外として(try/catchで)何かを処理したい場合は、特に例外をスローする必要があります。あなたは 'include'とは違って' require'を持っていますが、それはキャッチ可能ではない「致命的なエラー」を投げます(私は間違いかもしれませんが、デフォルトではそうではありません)。 – Qirel
「エラー」を返し、実際の例外メッセージを表示する代わりに、この行があなたの代わりになることを希望する場合$ content = 'エラー';
$content = 'Caught exception: '.$e->getMessage();
この場合、関数はメッセージエラー文字列を含む$ contentを返します。
使用 'file_exists()'とは '例外をthrow'? – Qirel
getContent()はスローされますか? – marekful
try catchブロック内で作成された変数は、それらの外側でアクセスできませんか?私は本当に知りません。 – Phiter