PHP If 语句混淆

标签 php arrays if-statement error-reporting

我研究 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/

相关文章:

php - 匹配字符串中空格后的位数

php - 如何启用 IMAP 模块

java - 错误: no suitable constructor found for JsonArrayRequest

php - IF 内部 JSON 编码

javascript - 如何在javascript中管理多个if和else

linux - 如何知道bash中文件是否被删除和创建?

javascript - 使用jquery显示特定的li标签

php - 根据 UserID 进行重定向

java - 二维数组,查找数组中重复次数最多的数字

php : Setting variable inside array