2017-02-21 12 views
0

愚かな質問のように聞こえるかもしれませんが、error_reportingについてわからないことがあり、php.netやgoogleの研究の後で説明を見つけることができませんでした。なぜerror_reportingでバイナリ操作を行う必要がありますか?

私のローカルワークステーションのエラーはこれです:

のerror_reporting( - E_DEPRECATED - E_ALL E_WARNING)。

仕事で他のみんなは、次のとおりです。

のerror_reporting(E_ALL &〜E_DEPRECATED &〜E_WARNING)。

私の質問は、なぜ同じ結果が得られますか?なぜ単純な減算ではなくバイナリ演算を使用する必要がありますか?

ありがとうございます。

+0

に設定されたビット私はこのケースでは、彼らは同等だということを感じていますちょうどチャンスです。それらがビットフラグであれば、私は '&'を使うことを期待しています。 – Carcigenicate

+0

*バイナリ*演算は、*バイナリ*フラグでは普通です。また、参照のために: 'E_ALL - E_WARNING - E_WARNING'と' E_ALL&E_WARNING&〜E_WARNING'を比較してみてください –

答えて

0

E_DEPRECATEDE_WARNINGは完全に異なるビットが設定されており、それらをすべてE_ALLから差し引くので、すべてのビットが設定されています。

同じビットセットまたは結合ビットセットを2回削除しようとすると、実際の違いが発生します。この場合、 'bits'を複数回削除すると、間違った値になります。一般的に

、あなたはおそらく、単にエラーフラグから1つのオプションを削除しますし、知っていない、現在

$level = error_reporting(); 
// at this point, you simply can't use simple math, as you don't know, if the given error reporting option is set or not 
$level = $level & ~E_WARNING; 
error_reporting($level); 
関連する問題