PHP一行if语句在字符串中有奇怪的行为


php one line if statement strange behavior in string

为什么下面的代码打印Five

$a = 6;
$b = 'Hey, The Value of $a Is '.
    ($a == 1)?'One':''.
    ($a == 5)?'Five':''.
    ', Period.';
echo $b;

为什么只有Five ??

因为您应该为每个简写if语句使用() :

$a = 5;
$b = 'Hey, The Value of $a Is '.
(($a == 1) ? 'One' : '') . (($a == 5) ? 'Five' : '') .
', Period.';
echo $b;

之所以发生,是因为$b首先被分配给'Hey, The Value of $a Is ',然后分配给One(如果语法无效,作为速记),之后它被分配给Five(再次,由于巧合,因为它仍然是第一个),并且(再次)语法无效,该值不与',Period.'连接。所以,总的来说,这个字符串只是三个赋值的顺序,因为第三个是Five,所以它在浏览器中被打印出来。

我们将代码设为1行

$b = '嘿,$a的值是'。($a == 1)?($a == 5)?' 5 ': "。"。";

删除冗余。

$b = '嘿,$a的值是'。($a == 1)?' 1 ':($a == 5)?"五":"。",

所以$a = 5表示执行黑体显示的部分:

($a == 5)?"五":"。"

现在,由于$a = 5只显示的部分被再次执行,因此我们只得到'Five'。