我研究 PHP 已有一段时间了,但我偶然发现了一些我无法理解的东西。它来 self 在这里找到的一篇帖子(我相信该帖子已被锁定),我理解大部分解决方案,但只有一部分让我感到困惑。
if ( ( $number & $error_number ) == $number )
{
$error_description[ ] = $description;
}
我不太确定这里检查的是什么。感谢您的帮助。
((完整代码))
<?php
$error_number = 22527; //could also use ini_get('error_reporting')
$error_description = array( );
$error_codes = array(
E_ERROR => "E_ERROR",
E_WARNING => "E_WARNING",
E_PARSE => "E_PARSE",
E_NOTICE => "E_NOTICE",
E_CORE_ERROR => "E_CORE_ERROR",
E_CORE_WARNING => "E_CORE_WARNING",
E_COMPILE_ERROR => "E_COMPILE_ERROR",
E_COMPILE_WARNING => "E_COMPILE_WARNING",
E_USER_ERROR => "E_USER_ERROR",
E_USER_WARNING => "E_USER_WARNING",
E_USER_NOTICE => "E_USER_NOTICE",
E_STRICT => "E_STRICT",
E_RECOVERABLE_ERROR => "E_RECOVERABLE_ERROR",
E_DEPRECATED => "E_DEPRECATED",
E_USER_DEPRECATED => "E_USER_DEPRECATED",
E_ALL => "E_ALL"
);
foreach( $error_codes as $number => $description )
{
if ( ( $number & $error_number ) == $number )
{
$error_description[ ] = $description;
}
}
echo sprintf(
"error number %d corresponds to:<br>\n%s",
$error_number,
implode( " | ", $error_description )
);
?>
我知道数组中的键是预定义的 PHP 常量,但我不确定最后一个 if 语句是如何工作的/它正在评估什么。
最佳答案
&
运算符是一个 Bitwise Operator在使用时,它会返回一个在两个变量中都设置了“位”的值,在本例中为 $number
和 $error_number
。
如果当前 $error_number
包含 $number
的位,那么它包含该错误(如果这有意义?)。
例如(二进制):
0001 & 1000 = 0000
0001 & 0111 = 0001
0110 & 1111 = 0110
结果显示两个值中有一个位设置(即 1
)的值 AND
在一起。
另一个例子(带有错误号):
$error_number = E_USER_DEPRECATED | E_WARNING | E_ERROR;
if ($error_number & E_WARNING) echo 'E_WARNING'; // will output
if ($error_number & E_PARSE) echo 'E_PARSE'; // will not output
关于PHP If 语句混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21123425/