Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当一个或多个数值常量按位值作为参数传递时,为什么phpinfo()函数给出错误的结果?_Php_Function_Constants_Phpinfo_Bitwise Or - Fatal编程技术网

当一个或多个数值常量按位值作为参数传递时,为什么phpinfo()函数给出错误的结果?

当一个或多个数值常量按位值作为参数传递时,为什么phpinfo()函数给出错误的结果?,php,function,constants,phpinfo,bitwise-or,Php,Function,Constants,Phpinfo,Bitwise Or,我使用的是PHP7.2.8 我执行了以下代码: <?php phpinfo(2 | 8); //Bitwise OR operator is used ?> <?php phpinfo(00000010 | 1000000); //Bitwise OR operator is used ?> 以上代码运行良好,并给出了预期的结果 然后我尝试将数字常量按位值作为参数传递,即数字2和8的二进制等价物作为参数传递。请参阅以下代码: <?php phpi

我使用的是PHP7.2.8

我执行了以下代码:

<?php
  phpinfo(2 | 8); //Bitwise OR operator is used
?>
<?php
  phpinfo(00000010 | 1000000); //Bitwise OR operator is used
?>

以上代码运行良好,并给出了预期的结果

然后我尝试将数字常量按位值作为参数传递,即数字2和8的二进制等价物作为参数传递。请参阅以下代码:

<?php
  phpinfo(2 | 8); //Bitwise OR operator is used
?>
<?php
  phpinfo(00000010 | 1000000); //Bitwise OR operator is used
?>

我得到了上述代码的意外输出(即,传递数值常量的按位值的第二个代码)

为什么会这样

有关要传递给
phpinfo()
函数的参数的说明信息,以及要传递的每个数值常量的含义,请参阅

请告诉我哪里出了错?我只是尝试执行手册文本中描述的代码


谢谢。

要在PHP中用二进制表示数字,必须使用前缀
0b
(例如,
0b00000010


如果没有这个前缀,这些数字将以一种你不希望的方式被解释
00000010
被解释为8的八进制表示,而
1000000
被解读为十进制的一百万。

要在PHP中用二进制表示数字,必须使用前缀
0b
(例如,
0b00000010


如果没有这个前缀,这些数字将以一种你不希望的方式被解释
00000010
被解释为8的八进制表示,而
1000000
被解读为100万,十进制。

输出之间的唯一区别是第二个输出包含许可证信息。为什么要在第一位使用数值,而不是命名常量?@Barmar:感谢您的评论。我只是在引用了phpinfo()函数的PHP手册描述页面上给出的“phpinfo()示例”之后才使用这些数值。在本例中,他们演示了phpinfo(信息单元模块);phpinfo(8);产生相同的结果。所以,我尝试使用相应的常数数值。根据PHP编码标准,这种用法是否被视为无效?请在这方面指导我。我热切地等待着你对我这个疑问的回应。无论以何种编码标准来衡量,这都是不好的做法。硬编码魔法数字从来都不是个好主意。如果有人在读代码,他们怎么知道这些数字代表什么?他们必须在文档中搜索它,而您只需使用命名常量就可以轻松地进行搜索。@Barmar:谢谢您的宝贵建议,先生。我会一直记住这件事。输出的唯一区别是第二个有许可证信息。你为什么首先使用数值而不是命名常量?@Barmar:谢谢你的评论。我只是在引用了phpinfo()函数的PHP手册描述页面上给出的“phpinfo()示例”之后才使用这些数值。在本例中,他们演示了phpinfo(信息单元模块);phpinfo(8);产生相同的结果。所以,我尝试使用相应的常数数值。根据PHP编码标准,这种用法是否被视为无效?请在这方面指导我。我热切地等待着你对我这个疑问的回应。无论以何种编码标准来衡量,这都是不好的做法。硬编码魔法数字从来都不是个好主意。如果有人在读代码,他们怎么知道这些数字代表什么?他们必须在文档中搜索它,而您只需使用命名常量就可以轻松地进行搜索。@Barmar:谢谢您的宝贵建议,先生。我会永远记住这件事。