2013-05-20 6 views
5

同じ名前の文字列を想定した(ばかげた)デフォルトの動作ではなく、PHPに致命的なエラーなどを引き起こすようなphp.ini設定やその他のトリックはありますか?定義されていない定数のPHP動作を変更しますか?

デフォルトの動作では、セキュリティ上のリスクが大きくなる可能性がありますが、アプリケーションエラーが発生することがあります。値を求める前にdefined()を使用して定数の存在をチェックすることができますが、これは冗長で醜いコードにつながり、開発者のエラーが発生しがちです。私たちは、使用された定数が定義されていることを確認することに非常に注意を払っていますが、この問題はまだ生産に潜んでいます。致命的なエラーは、より「あなたの顔」であり、QAによって圧迫される可能性は非常に低くなります。

答えて

2

未定義の定数は、PHP通知を生成します。

あなたはただ、少なくとも開発モードでは、任意のPHPの警告のために例外をスローすることができます

set_error_handler(function ($errno, $errstr, $errfile, $errline) { 

    throw new ErrorException($errstr, $errno, 1, $errfile, $errline); 

    // or turn it in a fatal error 

    trigger_error($errstr, E_USER_ERROR); 
}); 

だけundefined constant警告を処理したい場合は、テストをUse of undefined constant FOO - assumed 'FOO'に対する$errstr一致した場合。


注:正規化されていないグローバル定数は、次のように動作します。定義されていないクラス定数や未定義の名前空間定数(例:Foo::BARまたはFoo\BAR)にPHPが致命的なエラーを投げます。

未定義の定数を使用するときにPHPに致命的なエラーが発生するようにするには、クラス定数または名前空間定数を使用する方法があります。

+0

+1。私はクラス定数について知っていましたが、私はいつも名前空間の定数はこれに関して無資格の定数と同じように動作すると仮定しました。先端に感謝します。 – FtDRbwLXw6

3
set_error_handler(function($type, $error) { 
    if(stripos($error, 'Use of undefined constant') !== FALSE) 
    { 
     // god forbid - someone's used an undefined constant. Act appropriately. 
     trigger_error($error, E_USER_ERROR); // Triggers a fatal error. 
     return TRUE; 
    } 
}, E_NOTICE); 

これは私の知る限り、PHPのエラー「ランキング」を変更する方法はありません承知しているとして、あなたが探しているものかもしれないです。

+0

これはまさに私が書いていたものです;) – smassey

関連する問題