3

error_reporting 値を設定するときの「^」文字と「~」文字の使用の違いを理解しようとしています。たとえば、私のphpスクリプトには次のものがあります。

if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
error_reporting(E_ALL & ~ E_DEPRECATED & ~ E_USER_DEPRECATED & ~ E_NOTICE);
} else {
error_reporting(E_ALL ^ E_NOTICE);
}

次のマニュアルページを読みました。

http://php.net/manual/en/function.error-reporting.php

しかし、私は今まで以上に混乱しています。は:

error_reporting(E_ALL & ~ E_DEPRECATED & ~ E_USER_DEPRECATED & ~ E_NOTICE);

と同じ:

error_reporting(E_ALL ^ E_DEPRECATED ^ E_USER_DEPRECATED ^ E_NOTICE);
4

2 に答える 2

2

これらはビット演算子です: http://php.net/manual/en/language.operators.bitwise.php

error_reporting(E_ALL & ~ E_DEPRECATED & ~ E_USER_DEPRECATED & ~ E_NOTICE);

E_ALL と NOT E_DEPRECATED と NOT E_USER_DEPRECATED と NOT E_NOTICE を意味します

その間

error_reporting(E_ALL ^ E_DEPRECATED ^ E_USER_DEPRECATED ^ E_NOTICE);

E_DEPを除くE_ALLを意味します....など

于 2012-12-04T05:11:20.957 に答える
0

あなたの質問に対するより関連性の高い回答は、php.net のエラー報告ページのコメントに記載されていたと思います。これをここに再投稿します。

E_ALL ^ E_NOTICE の例は、ビットごとの演算子に完全に精通していない私たちにとって「少し」紛らわしいものです。

現在のレベルから通知を削除したい場合は、不明なレベルが何であれ、代わりに & ~ を使用します。

<?php
//....
$errorlevel=error_reporting();
error_reporting($errorlevel & ~E_NOTICE);
//...code that generates notices
error_reporting($errorlevel);
//...
?>

^ は xor (ビット フリッピング) 演算子であり、(左側のエラー レベルで) 以前にオフになっていた場合、実際には通知をオンにします。E_ALL には E_NOTICE のビットが設定されていることが保証されているため、この例では機能します。したがって、^ がそのビットを反転すると、実際にはオフになります。& ~ (および not) は、右側のパラメーターで指定されたビットがオンかオフかに関係なく、常にオフになります。

于 2013-02-08T08:51:33.217 に答える