认真我们会发现,用位运算,能很快且巧妙的解决这个问题: if(((E_ERROR | E_COMPILE_ERROR | E_CORE_ERROR ) & $severity) === $severity){ return TRUE; } else { return FALSE; } 十进制:E_ERROR = 1; 换算成二进制: 1 十进制:E_COMPILE_ERROR = 64; 换算成二进制: 1000000 十进制:E_CORE_ERROR = 16; 换算成二进制: 10000 (E_ERROR | E_COMPILE_ERROR | E_CORE_ERROR ) 三个常量通过 | 位运算得到 1010001 ((E_ERROR | E_COMPILE_ERROR | E_CORE_ERROR ) & $severity 也就是 1010001 & $severity, 当 $severity = 1 时: 1010001 & $severity = 1, 所以 (1010001 & $severity) == $severity ; 当 $severity = 1000000 时: 1010001 & $severity = 1000000, 所以 (1010001 & $severity) == $severity ; 当 $severity = 10000时: 1010001 & $severity = 10000, 所以 (1010001 & $severity) == $severity 当 $severity 的值是上述三个常量中的一个,位运算之后就会得到与 $severity 本身的值一样, 所以该运算成立。 从上述我们知道,位运算符能很快的解决我们的问题,尤其是在一些算法当中,位运算符很常用, 因为我们的机器语言是 二进制,不是0就是1,通过位运算,能快速计算一些问题。当然,我们在定义一些变量的时候,也要遵循一定的原则。以上文章只是让大家了解一个道理而已。
