我无法理解为什么我会得到输出" 1"来自PHP中的以下语句,
<?php echo !!!0;?>
请让我知道原因
答案 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)