为什么这个 shorthand if 语句在长格式有效时返回 0?

Why is this shorthand if statement returning 0 when the long form works?

我有以下代码,其中我定义了一个值,但是当我尝试对其执行任何 shorthand 方程时,它 returns 0.

三元运算

$m = 1.10;
echo 'Markup Percentage : ' . ( $m > 1 ? ($m * 100) - 100 :  'N/A' ) + ' %';

结果:

Markup Percentage : 0 %


标准操作。

$m = 1.10;

echo 'Markup Percentage : ';    
if($m > 1) {
   echo ($m * 100) - 100;
} else {
   echo 'N/A';
}
echo ' %';

Markup Percentage : 10 %


如果不是很明显,三元运算的结果应该与标准运算的结果相同。我做错了什么或者这是 php 5.4 中的错误?

发生这种情况是因为错误的操作员。 . 用于连接,而不是 +。试试 -

$m = 1.10;
echo 'Markup Percentage : ' . ( ($m > 1) ? (($m * 100) - 100) :  'N/A' ) . ' %';

但我建议在使用三元运算符时适当地对操作进行分组。不仅适用于三元,适用于所有运营商。理解优先级非常重要。

echo 'Markup Percentage : ' . ( $m > 1 ? ($m * 100) - 100 :  'N/A' ) . ' %';

应该也可以。

这是因为您在没有 ( 的情况下使用多重计算,所以他们搞砸了,另一个错误是您使用 + 符号代替 .

您可以像下面这样使用三元运算符:

$m = 1.10;
echo 'Markup Percentage : ' . ( ($m > 1) ? (($m * 100) - 100) : 'N/A' ) . ' %';
//OP: Markup Percentage : 10 %