我正在浏览 php.net 的运算符优先级部分,并遇到了这个例子,它说
$a = 1;
$b = null;
$c = isset($a) && isset($b);
$d = ( isset($a) and isset($b) );
$e = isset($a) and isset($b);
var_dump($a, $b, $c, $d, $e);
//Result:
int(1)
NULL
bool(false)
bool(false) <== I get this
bool(true) <== I do not get this
我在代码中使用了大量的调试和冗长的 print(_r) 语句来跟踪我在代码中的位置。所以我在代码之间使用$debug and print_r($dataArray)
or$verbose and print "Updating dataArray\n"
作为单独的语句,允许我控制这些 print(_r) 语句。这来自我曾经写过很多[[ $condition ]] && { #Do if true } || { #Do if false }
. 在 BASH 中,我知道它们是短路的,并利用这个事实编写了很多简单的单行。
现在我观察到很多这种做法(写作$verbose and print
)正在慢慢地潜入我的if
陈述中。我知道这不是推荐的做法,可能会在后面咬我。但是,我确实想掌握这项技能,因为我喜欢写这样一个班轮,并希望将其用作我的个人风格。
所以我的问题是(是):
- 哪个运算符(
&&
或and
)短路了? - 手册说
&&
优先于and
,但是有人可以通过将短路的运算符特性/功能/特性与运算符优先级混合来举例说明。(基本上是优先级和短路的混搭)
请详细说明运算符的短路和返回值性质。
PS:1.希望这些操作符的关联性是一样的和直观的,但是如果你知道任何怪癖,请赐教。
PS:2.如果您仍然想警告我这种做法的危险,请举例说明。
$var = mysql_(...) or die()
编辑:通过替换更改我的简单代码or
后,我发现使用and运算符而不是and||
是多么烦人。代码根本不起作用!据我了解,前一个构造将返回值分配给or ,这反过来又使所有顺序使用来生成警告/错误/意外行为。后一种构造首先将 的结果分配给,然后计算 和 的复合物。这对我来说是一个很好的教训,我最好 1. 开始使用 PDO/mysqli 并自己处理错误 2. 在写我上面所说的个人风格
之前三思而后行||
&&
and
or
TRUE
FALSE
$var
$var
mysql_(...)
$var
=
die
.
//自我注意:不要在用另一种语言编写代码时使用一种脚本/解释性语言的经验,每一种都是独一无二的,有自己的怪癖和陷阱,这只是悲伤*叹息*