E_ALL ^ E_NOTICE
和E_ALL & ~E_NOTICE
之间有什么区别?
据我了解,他们都排除了E_NOTICE
级别的错误报告。但是在PHP.ini
中使用了&~
形式,而我在很多地方都看到了^
形式。
答案 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_ALL
和E_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,因此您处于两种条件相同的特殊情况。