我理解为什么“回声!0;”返回1.我不明白为什么回声!!! 0也返回1.请让我知道我错过了什么。
答案 0 :(得分:6)
您遗漏!
是不是运算符,而0
是假值:
!0;//oposite of "false" ==> true ==> 1
!!!0;//oposite of the oposite of the oposite ==> oposite
当回显布尔值时,它会转换为实际值(如果有)。要做到真实,必须如此。因此true
是1
。同样地,对于某些东西是假的,它不可能,因此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