E_ALL ^ E_NOTICE和E_ALL& 〜E_NOTICE

时间:2014-03-05 21:16:36

标签: php

E_ALL ^ E_NOTICEE_ALL & ~E_NOTICE之间有什么区别?

据我了解,他们都排除了E_NOTICE级别的错误报告。但是在PHP.ini中使用了&~形式,而我在很多地方都看到了^形式。

2 个答案:

答案 0 :(得分:4)

^&~之间存在差异,但在这种情况下没有区别。

^表示XOR,因此在结果中设置在左操作数或右操作数中设置但不在两者中的位。 &~表示AND NOT,因此在结果中设置在左操作数中设置但在右操作数中不设置的位。

如果我们查看以下数字,则会有所不同:

$a = 0b1010; // decimal 10
$b = 0b0001; // decimal 1

$a ^ $b会产生0b1011(十进制11),而$a & ~$b会产生0b1010(十进制10)。

但是,E_ALL实际上是0b11111111(即所有位都已设置;它实际上相当于8位)。所以XOR实际上与AND NOT相同。

$a = 0b11111111; // decimal 255
$b = 0b00000100; // decimal 4

$a ^ $b提供0b11111011(十进制251),$a & ~$b也是如此。

答案 1 :(得分:1)

第一种表示法是E_ALLE_NOTICE之间的异或。第二种表示法是按位AND,其中否定运算符应用于E_NOTICE。这两个条件在技术上并不相同,因为第一个XOR可以重写为((E_ALL & ~E_NOTICE) | (~E_ALL & E_NOTICE))

参考:php.net/manual/en/language.operators.bitwise.php

编辑完整性:正如Jack和lonesomeday指出的那样,由于E_ALL将所有相关位设置为1,因此您处于两种条件相同的特殊情况。