-6

我明白为什么“回声!0;” 返回 1。我不明白为什么 echo !!!0 也返回 1。请让我知道我缺少什么。

4

5 回答 5

6

您缺少的!not运算符,这0是一个错误的值:

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

当一个布尔值被回显时,它被转换成它的实际值(如果有的话)。为了使某事成为真实,它必须是真实的。true也是如此1echo 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/表达式之前的符号数,我们将其称为e

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

如果操作数前面的否定运算符的数量是偶数,则表达式将被计算为其值,并转换为布尔值。如果否定运算符的数量是奇数,则表达式将被计算为其相反的布尔值。
只需将 all!替换.

于 2013-08-12T08:15:55.553 回答
2

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

var_dump(!0);

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

bool(true)
于 2013-08-12T08:29:01.533 回答
1

由于!是逻辑 NOT 运算符并且 0 被解释为false,因此您会得到:

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

当你echo true;,PHP 输出一个1.

于 2013-08-12T08:18:03.920 回答
1

!0等于true;

当你回显真实时,你会得到1

零本身被认为是错误的:

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

if (!0) // if not 0 means true
   echo "you see this."
于 2013-08-12T08:16:03.837 回答
0

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

0 = 0

!0 = 1

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

!!!0 = 1

于 2013-08-12T08:17:28.573 回答