我正在阅读php.net的运算符优先级部分,看到了这个例子,它说:
我在我的代码中使用了相当多的调试和详细的print(_r)语句来跟踪代码的执行过程。因此,我在代码之间使用
现在我发现这种写法(写
所以我的问题是:
PS: 1. 我希望这些运算符的关联性是相同和直观的,但如果你知道任何怪异的地方,请告诉我。 PS: 2. 如果你仍然感觉需要警告我这种做法的危险性,请举例说明。
$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)
或$verbose and print "Updating dataArray\n"
作为单独的语句,这样我就可以控制这些print(_r)语句的输出。这种做法源于我在BASH中编写大量[[ $condition ]] && { #Do if true } || { #Do if false }
的经验。在BASH中,我知道它们被短路了,并利用这一点编写了很多简单的一行代码。现在我发现这种写法(写
$verbose and print
)正慢慢地渗透到我的if语句中。我知道这不是推荐的做法,而且可能会对我造成伤害。然而,我确实想要掌握这种技能,因为我喜欢写这样的一行代码,并希望将其作为我的个人风格使用。所以我的问题是:
&&
或and
哪个是短路的运算符?- 手册上说
&&
优先于and
,但是否有人可以通过混合短路运算符的特性/功能/特征和操作符优先级来说明这一点。(基本上是优先级和短路混合)
PS: 1. 我希望这些运算符的关联性是相同和直观的,但如果你知道任何怪异的地方,请告诉我。 PS: 2. 如果你仍然感觉需要警告我这种做法的危险性,请举例说明。
编辑:我曾经用简单的$var = mysql_(...) or die()
代码,将其中的or
替换为||
后,我发现使用||
和&&
运算符比使用and
和or
运算符更加麻烦。 代码根本就不起作用!在我看来,前一种结构将$var
的返回值赋值为TRUE
或FALSE
,这会导致所有顺序使用$var
的行为产生警告/错误/意外行为。而后一种结构首先将mysql_(...)
的结果分配给$var
,然后评估=
和die
的复合体。
这是一个好的教训,我最好 1. 开始使用PDO/mysqli并自己处理错误 2. 在编写所谓的个人风格的东西之前三思。
//自我提示:不要在编写另一种脚本/解释语言的代码时使用一种语言的经验,每种语言都是独特的,都有自己的怪癖和缺陷,这很悲哀 *叹气*
||
(和&&
)替换了所有的or
(和and
)。 - Sudhi