Php 这段代码到底为什么要这样做?什么样的运营商是&;?

Php 这段代码到底为什么要这样做?什么样的运营商是&;?,php,function,error-reporting,Php,Function,Error Reporting,我在手册中搜索错误报告。在那里,我发现了一个示例,其中列出了浏览器窗口中的所有错误报告级别。我仔细阅读了代码,有些编码风格对我来说似乎不熟悉,我无法理解它到底是做什么的 在手册中,它说错误报告()返回: 返回旧的错误报告级别,如果没有级别,则返回当前级别 给出了参数 我知道错误\u报告(级别)决定显示或不显示哪种类型的错误。但是当它被分配给一个变量时,它会返回什么呢?例如: $errLvl = error_reporting(); 我已经打印了$errLvl,它返回了22527。我不明白这是

我在手册中搜索
错误报告
。在那里,我发现了一个示例,其中列出了浏览器窗口中的所有错误报告级别。我仔细阅读了代码,有些编码风格对我来说似乎不熟悉,我无法理解它到底是做什么的

在手册中,它说
错误报告()
返回:

返回旧的
错误报告级别
,如果没有级别,则返回当前级别 给出了参数

我知道
错误\u报告(级别)
决定显示或不显示哪种类型的错误。但是当它被分配给一个变量时,它会返回什么呢?例如:

$errLvl = error_reporting(); 
我已经打印了
$errLvl
,它返回了
22527
。我不明白这是什么意思?有人能用简单的英语给我解释一下吗

有一个名为
FriendlyErrorType($type)
的函数,它将接受错误类型并在浏览器中打印。但是它被赋予了一个参数
($errLvs&pow(2,i))
&
操作员应该做什么?我的意思是,
&
运算符在参数中的作用是什么

print FriendlyErrorType($errLvl & pow(2, $i))
完整代码:

$errLvl = error_reporting();
echo $errLvl.'</br>';
for ($i = 0; $i < 15;  $i++ ) {
    print FriendlyErrorType($errLvl & pow(2, $i)) . "<br>\\n";
}

function FriendlyErrorType($type)
{
    switch($type)
    {
        case E_ERROR: // 1 //
            return 'E_ERROR';
        case E_WARNING: // 2 //
            return 'E_WARNING';
        case E_PARSE: // 4 //
            return 'E_PARSE';
        case E_NOTICE: // 8 //
            return 'E_NOTICE';
        case E_CORE_ERROR: // 16 //
            return 'E_CORE_ERROR';
        case E_CORE_WARNING: // 32 //
            return 'E_CORE_WARNING';
        case E_COMPILE_ERROR: // 64 //
            return 'E_COMPILE_ERROR';
        case E_COMPILE_WARNING: // 128 //
            return 'E_COMPILE_WARNING';
        case E_USER_ERROR: // 256 //
            return 'E_USER_ERROR';
        case E_USER_WARNING: // 512 //
            return 'E_USER_WARNING';
        case E_USER_NOTICE: // 1024 //
            return 'E_USER_NOTICE';
        case E_STRICT: // 2048 //
            return 'E_STRICT';
        case E_RECOVERABLE_ERROR: // 4096 //
            return 'E_RECOVERABLE_ERROR';
        case E_DEPRECATED: // 8192 //
            return 'E_DEPRECATED';
        case E_USER_DEPRECATED: // 16384 //
            return 'E_USER_DEPRECATED';
    }
    return "";
$errLvl=error_reporting();
echo$errLvl.'
'; 对于($i=0;$i<15;$i++){ 打印友好的错误类型($errLvl&pow(2,$i))。“
\\n”; } 函数FriendlyErrorType($type) { 交换机($类型) { 案例E_错误://1// 返回“E_错误”; 案例E_警告://2// 返回“E_警告”; 案例E_://4// 返回'E_PARSE'; 案例E_通知://8// 返回“E_通知”; 案例E_核心错误://16// 返回“E_CORE_ERROR”; 案例E_CORE_警告://32// 返回“E_核心警告”; 案例E_编译_错误://64// 返回'E_COMPILE_ERROR'; 案例E_编译_警告://128// 返回“E_编译_警告”; 案例E_用户_错误://256// 返回“E_用户_错误”; 案例E_USER_警告://512// 返回“E_用户_警告”; 案例E_用户_通知://1024// 返回“电子用户通知”; 案例E_://2048// 返回“E_STRICT”; 案例E_可恢复_错误://4096// 返回“E_可恢复错误”; 案例E_已弃用://8192// 返回“E_已弃用”; 案例E_USER_已弃用://16384// 返回“E_USER_已弃用”; } 返回“”;
因此,您的代码只是检查您的错误类型,并返回该错误类型的常量名称

但首先要澄清这是什么
&
运算符。它是一个(也可以将其视为参考:)

基本上是这样的:

  A    |    B    &   results 
-----------------------------
  0    |    0   ->     0
  0    |    1   ->     0
  1    |    1   ->     1
  1    |    0   ->     0
因此,一个简单的英语例子是:

如果阳光明媚,而且我今天不必工作,那么我就出去(否则就不去了)


因此,现在您的代码只需获得您当前的错误级别:

$errLvl = error_reporting();
对你来说,它是:

22527  //Which in binary is: 0101'0111 1111'1111
在此之后,它将循环15次,基本上总是检查下一个数字是1还是0,例如:

1.迭代:

0101'0111 1111'1111            // your error level
                  1            // pow(2, $i) -> 2^0 -> 1
------------------- &
                  1  =      1  //argument for the function call
0101'0111 1111'1111            // your error level
                 10            // pow(2, $i) -> 2^1 -> 2
------------------- &
                 10  =      2  //argument for the function call
0101'0111 1111'1111            // your error level
0100'0000 0000'0000            // pow(2, $i) -> 2^14 -> 16384
------------------- &
0100'0000'0000'0000  = 16'384  //argument for the function call
2.迭代:

0101'0111 1111'1111            // your error level
                  1            // pow(2, $i) -> 2^0 -> 1
------------------- &
                  1  =      1  //argument for the function call
0101'0111 1111'1111            // your error level
                 10            // pow(2, $i) -> 2^1 -> 2
------------------- &
                 10  =      2  //argument for the function call
0101'0111 1111'1111            // your error level
0100'0000 0000'0000            // pow(2, $i) -> 2^14 -> 16384
------------------- &
0100'0000'0000'0000  = 16'384  //argument for the function call

15.迭代:

0101'0111 1111'1111            // your error level
                  1            // pow(2, $i) -> 2^0 -> 1
------------------- &
                  1  =      1  //argument for the function call
0101'0111 1111'1111            // your error level
                 10            // pow(2, $i) -> 2^1 -> 2
------------------- &
                 10  =      2  //argument for the function call
0101'0111 1111'1111            // your error level
0100'0000 0000'0000            // pow(2, $i) -> 2^14 -> 16384
------------------- &
0100'0000'0000'0000  = 16'384  //argument for the function call
然后,在函数中,它只是一个switch语句,如果设置了相应的数字,就可以得到正确的返回项

您还可以在此处看到所有预定义的错误常量:

此处显示:

0000'0000 0000'0000
|||| |||| |||| |||| ----- E_ERROR              =      1
|||| |||| |||| ||| ------ E_WARNING            =      2
|||| |||| |||| || ------- E_PARSE              =      4
|||| |||| |||| | -------- E_NOTICE             =      8
|||| |||| ||||
|||| |||| |||| ---------- E_CORE_ERROR         =     16
|||| |||| ||| ----------- E_CORE_WARNING       =     32
|||| |||| || ------------ E_COMPILE_ERROR      =     64
|||| |||| | ------------- E_COMPILE_WARNING    =    128
|||| ||||
|||| |||| --------------- E_USER_ERROR         =    256
|||| ||| ---------------- E_USER_WARNING       =    512
|||| || ----------------- E_USER_NOTICE        =  1'024
|||| | ------------------ E_STRICT             =  2'048
||||
|||| -------------------- E_RECOVERABLE_ERROR  =  4'096
||| --------------------- E_DEPRECATED         =  8'192
|| ---------------------- E_USER_DEPRECATED    = 16'384
| ----------------------- E_ALL                = 32'767
现在,如果你想问为什么它不检查最后一个数字(
E_ALL
),因为基本上
E_ALL==所有错误类型
。因此,如果你得到所有错误类型,你就有错误报告:
E_ALL


因此,最终您的错误级别将可视化:

0000'0000 0000'0000
|||| |||| |||| |||| ----- E_ERROR              =      1
|||| |||| |||| ||| ------ E_WARNING            =      2
|||| |||| |||| || ------- E_PARSE              =      4
|||| |||| |||| | -------- E_NOTICE             =      8
|||| |||| ||||
|||| |||| |||| ---------- E_CORE_ERROR         =     16
|||| |||| ||| ----------- E_CORE_WARNING       =     32
|||| |||| || ------------ E_COMPILE_ERROR      =     64
|||| |||| | ------------- E_COMPILE_WARNING    =    128
|||| ||||
|||| |||| --------------- E_USER_ERROR         =    256
|||| ||| ---------------- E_USER_WARNING       =    512
|||| || ----------------- E_USER_NOTICE        =  1'024
|||| | ------------------ E_STRICT             =  2'048
||||
|||| -------------------- E_RECOVERABLE_ERROR  =  4'096
||| --------------------- E_DEPRECATED         =  8'192
|| ---------------------- E_USER_DEPRECATED    = 16'384
| ----------------------- E_ALL                = 32'767
0101'0111111'1111
|| | | | | | | | | | |--E|U错误
|| | | | | | | | | |--E|U警告
|| | | | | | | | | |----E|u PARSE
|| | | | | | | | |--E|U通知
| |  ||| ||||
|| | | | | | |--E|U核心错误
|| | | | | |--E|U核心警告
|| | | | | |------E|U编译错误
|| | | | |------E|u编译| u警告
| |  |||
|| | | |----------E|U用户错误
|| | |-------------------E|U用户警告
|| |------------电子用户通知
| |
||-------------------E_可恢复_错误
|  
|-------------------------E\u用户\u已弃用
代码的输出:
E_误差
紧急警告
E_解析
电子公告
E_核心错误
E_核心警告
编译错误
E_编译_警告
用户错误
用户警告
电子用户通知
可恢复错误

E_USER_已弃用
您知道什么是位吗?如何设置/获取字节/int中的位?我知道。但这里我们必须发送一个参数。按位运算符需要什么?也许可以编辑您的问题以显示(澄清)您是否了解
&
操作符的功能和作用,但不了解该部分代码中需要它的实际原因?@Lashane ahh好的,谢谢您的更正。(我删除了注释)@AL-zami阅读它将让您了解什么是面具