ajn*_*ari 2 php arrays if-statement error-reporting
我一直在使用PHP一段时间,但我偶然发现了一些我无法做出正面或反面的事情.这是我在这里发现的帖子(我相信已被锁定),我理解大部分解决方案,但只有一部分我很困惑.
if ( ( $number & $error_number ) == $number )
{
$error_description[ ] = $description;
}
Run Code Online (Sandbox Code Playgroud)
我不太确定在这里检查什么.任何帮助表示赞赏.
((完整代码))
<?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 )
);
?>
Run Code Online (Sandbox Code Playgroud)
我知道数组中的键是预定义的PHP常量,但我不确定最后的if语句是如何工作的/它正在评估什么.
该&操作是位运算符,其在使用时,会返回一个值的"位",在这两个变量设置,在这种情况下$number和$error_number.
如果当前$error_number包含的位数$number,那么它包含该错误(如果这有意义?).
例如(二进制):
0001 & 1000 = 0000
0001 & 0111 = 0001
0110 & 1111 = 0110
Run Code Online (Sandbox Code Playgroud)
结果显示两个值中的位设置(即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
Run Code Online (Sandbox Code Playgroud)