我有这个PHP if语句,我正在试图弄清楚。
我知道结果是什么,但我以前从未见过(可能是我的错)。
谁能帮助我理解下面的代码?为什么显示$a
而不显示$b
?因为$a
排在第一位?
<?php
$a = 'has a value';
$b = 'this one too!';
if (($href = $a) || ($href = $b)) {
echo $href;
//Result is 'has a value'.
}
?>
答案 0 :(得分:4)
||
使用“短路”评估。如果表达式的第一部分为true,则将不评估第二部分。在PHP中,
赋值表达式的值就是赋值。
(quoted from the =
documentation)
因此,在这种情况下,表达式($href = $a)
的值为分配值'has a value'
。该字符串的值为true(请参阅“ converting to boolean”),因此将不执行第二个赋值。
仅供参考,对于另一种重复性较低的书写方式,您可以执行以下操作:
if ($href = $a ?: $b) {
echo $href;
}