为什么"回声!!! 0"输出为1?

时间:2014-08-13 06:46:48

标签: php

我无法理解为什么我会得到输出" 1"来自PHP中的以下语句,

<?php echo !!!0;?>

请让我知道原因

3 个答案:

答案 0 :(得分:11)

该语句被解析为!(!(!0))!是逻辑否定运算符。当将它应用于除布尔值之外的任何其他类型(true / false)时,操作数首先被转换为布尔值(0,空字符串,空数组,空,空SimpleXML对象= false;其他一切都为真)。

让我们打破声明:

!!!0 ==
!!!false ==
!!true ==
!false ==
true

最后,echo true将输出1

答案 1 :(得分:3)

因为PHP&#34;演员&#34;执行逻辑运算时,0为布尔值。

所以!0是1
!1是0
!0是1

答案 2 :(得分:2)

!用于否定陈述(后评估)。

0 evaluates to false => true (1) => false (0) => true (1)
                        !           !            !

为什么数字转换为布尔值?

使用!隐式地发生这种情况,感叹号需要是true或没有false,因此它旁边的值会自动转换为符合此条件的值(是或没有)。

您可以使用以下方法进行类似的实验:

var_dump( !"hello world" );
//   ...

通过将类型放在括号中来完成显式转换:(boolean)1 === true

@ user2864740的更新:

<?php
var_dump(!0 === true);    // bool(true)
var_dump(!(0) === true);  // bool(true)
var_dump((!0) === true);  // bool(true)
var_dump((boolean)1 === true); // bool(true)
var_dump((boolean)1); // bool(true)

讨论后更新:

echo true;打印1。但这并没有改变变量,例如:

$x = true;
echo $x; // 1
var_dump($x); // bool(true)