当我回声!!! 0它给了我一个奇怪的结果

时间:2013-08-12 08:14:19

标签: php

我理解为什么“回声!0;”返回1.我不明白为什么回声!!! 0也返回1.请让我知道我错过了什么。

5 个答案:

答案 0 :(得分:6)

您遗漏!不是运算符,而0是假值:

!0;//oposite of "false" ==> true ==> 1
!!!0;//oposite of the oposite of the oposite ==> oposite

当回显布尔值时,它会转换为实际值(如果有)。要做到真实,必须如此。因此true1。同样地,对于某些东西是假的,它不可能,因此echo false;显示为空字符串,如deceze指出的那样。
要绝对清楚,你应该把!!!0看作是对“反向心理学”的幼稚尝试。

Don't give nothing to me. ~=> Give something to me (Don't + nothing is double negation)
I'm not Not giving nothing to you. ~=> I'm not giving anything (not + not + nothing is tripple negation)

底线,假设n是值/ var / expression之前的!个符号的数量,我们称之为e

if n%2 === 0
   (n(!)) e === (boolean)e
if n%2 === 1
   (n(!)) e === !e

如果操作数之前的否定运算符的数量是偶数,则表达式将被计算为其值,转换为布尔值。如果否定运算符的数量是奇数,则表达式将被计算为其对应的布尔值 只需用 的对话框替换所有!

答案 1 :(得分:2)

echo实际上是你失败了,在做一些研究时不要使用这个算子 但是养成使用var_dump()的习惯:

var_dump(!0);

你会永远知道真正的价值:

bool(true)

答案 2 :(得分:1)

!0等于true;

当你回复真实时,你得到1

零本身被认为是假的:

if (0) // false
   echo "you won't see this."

if (!0) // if not 0 means true
   echo "you see this."

答案 3 :(得分:1)

由于!是逻辑NOT运算符而0被解释为false,所以你得到这个:

!0 -> true
!!0 -> !(!0) -> !(true) -> false
!!!0 -> !(!(!0)) -> !(!(true)) -> !(false) -> true

当您echo true;时,PHP会输出1

答案 4 :(得分:0)

!是逻辑NOT运算符。将布尔值更改为相反的值0< => 1

0 = 0

!0 = 1

!! 0 = 0(第二个!更改为1,第一个将1更改为0)

!!! 0 = 1