PHPのeval関数を使用しようとしています。しかし、解析エラーの処理に行き詰まっています。1..または1++のようなエッジケースがあるかどうかを検討するのと同じように、解析エラーが発生した場合:構文エラー、.....
構文エラーの処理方法やエラーメッセージを回避する方法を知っている人はいますか? より良いエラーメッセージを表示したい。
また、エラーメッセージを変数に保存することは可能ですか?
ティア
PHPのeval関数を使用しようとしています。しかし、解析エラーの処理に行き詰まっています。1..または1++のようなエッジケースがあるかどうかを検討するのと同じように、解析エラーが発生した場合:構文エラー、.....
構文エラーの処理方法やエラーメッセージを回避する方法を知っている人はいますか? より良いエラーメッセージを表示したい。
また、エラーメッセージを変数に保存することは可能ですか?
ティア
説明書より
PHP 7 以降、評価されたコードに解析エラーがある場合、例外
eval()
がスローされます。ParseError
PHP 7 より前では、この場合、次のコードの実行は正常にeval()
戻りました。を使用しFALSE
て解析エラーをキャッチすることはできません。eval()
set_error_handler()
代わりにこれを使用します:
<?php
try {
eval('will cause error');
} catch (ParseError $e) {
echo 'Caught exception: '.$e->getMessage()."\n";
}
$response = @eval($string);
if (error_get_last()){
echo 'Show your custom error message';
//Or you can
print_r(error_get_last());
}
マニュアルから:
評価されたコードに解析エラーがある場合は、
eval()
戻りFALSE
、次のコードの実行が通常どおり続行されます。eval()
を使用して解析エラーをキャッチすることはできませんset_error_handler()
。
eval
しかし、任意のコードを呼び出すことはないので(そうですか?)、これは問題にはなりません。