例子1:
if(!print("1") || 1){
echo "a";
}else{
echo "b";
}
输出
1b
示例1 输出的是 "1b", 而不是 "1a"。在我看来,在解决了 !print("1") 后,最终条件应该是if(0 || 1)。
但是示例2 输出的是 "1a"。
示例2:
if((!print("1")) || 1){
echo "a";
}else{
echo "b";
}
输出
1a
你能详细说明一下,为什么第一条语句中的或条件没有生效吗?
print
是“特殊”的有关。print
实际上不是一个函数,而是一种“语言结构”。手册说它总是返回1,但如果你用function p() {echo "1"; return 1;}
替换它,那么上面的两个版本都会给你1a
作为结果。您不需要在参数列表中使用括号,因此print(“1”)
和print“1”
实际上是相同的东西。我想这一定对这里的效果有所贡献。 - CBroeprint("3")
,第一种情况仍将得到1b
,但第二种情况将得到3a
。 - CBroe!print("1" || 1)
。"1" || 1
是1
,所以你从打印语句中得到它作为输出 - 然后返回值(也是1
,但是一个“不同的”1
)在此之后被否定。 - CBroe