Perlなどの自動変数宣言を使用する他の言語には、厳密モードがあります。
この厳格モードを有効にすると、変数宣言が必要になり、宣言されていない変数を使用しようとするとすぐにPerlがエラーをスローします。
PHPは同様の機能を提供しますか?
やや。 エラー報告 でE_NOTICE
レベルを有効にできます。 (定数のリスト ここ 。)
宣言されていない変数の使用のすべてのインスタンスは、E_NOTICE
をスローします。
E_STRICT
エラーレベルは、これらの通知と、コードを最適化する方法に関する他のヒントもスローします。
error_reporting(E_STRICT);
スクリプトの終了
本当に深刻で、宣言されていない変数に遭遇したときに単に通知を出力するのではなく、スクリプトにterminateさせたい場合は、 カスタムエラーハンドラ を構築できます。
「未定義変数」が含まれるE_NOTICE
sのみを処理し、他のすべてをデフォルトのPHPエラーハンドラーに渡します。
<?php
error_reporting(E_STRICT);
function terminate_missing_variables($errno, $errstr, $errfile, $errline)
{
if (($errno == E_NOTICE) and (strstr($errstr, "Undefined variable")))
die ("$errstr in $errfile line $errline");
return false; // Let the PHP error handler handle all the rest
}
$old_error_handler = set_error_handler("terminate_missing_variables");
echo $test; // Will throw custom error
xxxx(); // Will throw standard PHP error
?>
数年後、php 7.0.0はdeclare(strict_types=1);
を獲得しました
http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration.strict
はい、スクリプトの先頭にerror_reporting(E_STRICT|E_ALL);
と入力します。
error_reporting
、設定することを忘れないでください display_errors
も同様です。エラー報告には複数のレベルがあることに注意してください。
PHPisデフォルトでは未宣言の変数に関する警告です。 error reporting レベルを上げるだけで、通知。ただし、PHPで変数を宣言するための特別な構文はなく、割り当てて変数を宣言するだけなので、未宣言の変数の値を使用します。他の言語とは異なり、「未宣言の変数への割り当て」は存在しないため、PHPは警告できません。
つかいます
error_reporting(E_ALL);
PHPコード。または、php.iniファイルでerror_reporting設定を設定して、すべてのPHPファイルに設定する
set_error_handler()
を使用して、独自のエラー処理関数を実装できます。
その後、必要に応じて特定のエラーレベルに対応できます。
たとえば、エラーメッセージを表示して記録するだけでなく、変数が適切に宣言されていない場合や、気に入らない条件が満たされている場合は、スクリプトを終了できます。
そうすれば、PHPインタープリターインスタンスで実行されるコードに対して非常に厳しいポリシーを適用できます。
エラーの報告と処理の要件は、開発環境と運用環境(WWW、企業イントラネットなど)で異なることをお勧めします。開発中は、問題を見つけて修正するために、可能な限り詳細を確認する必要があります。
ライブ環境では、PHPエラーメッセージをユーザーに表示するのではなく、スクリプトの機能を減らして続行できるようにする必要はありません(たとえば、「申し訳ありませんが、または、ユーザーをホームページにリダイレクトするなど)。これを実現する方法は、各環境のカスタムエラーハンドラーを使用することです。
はい、エラー報告でそれを行います。