PHP三元运算符语法错误

时间:2014-07-03 22:00:35

标签: php scripting

<?
$percent = 105;
$percent = ($percent > 100) ? 100 :
           ($percent < 0) ? 0 : $percent;
echo $percent;
?>

为什么这回音0?我正在查看我编写的JavaScript代码,并发现逻辑没有区别。

3 个答案:

答案 0 :(得分:6)

在PHP中,与JS和许多其他语言相比,the ternary operator is left-associative。这意味着您的表达式等同于

$percent = (($percent > 100) ? 100 : ($percent < 0)) ? 0 : $percent;

由于($percent > 100) ? 100 : ($percent < 0)在这种情况下评估为100,所以就像你写的一样

$percent = 100 ? 0 : $percent;

这显然会导致零。

建议:从不编写没有括号的复杂表达式。将parens放在适当的位置会使代码在JS和PHP中都能工作,并且可以说也更容易阅读。本着同样的精神,我承诺自己永远不会在同一个表达中使用超过一个单一的三元组。你可能也想这样做。

答案 1 :(得分:2)

由于操作员优先级,您的代码打印为0。

这个很好用:

<?php
$percent = 105;
$percent = ($percent > 100) ? 100 : (($percent < 0) ? 0 : $percent);
echo $percent;

答案 2 :(得分:1)

这就是你想要的:

$percent = ($percent > 100 ? 100 : ($percent < 0 ? 0 : $percent));

或者可能更简单一点,如下:

$percent = min(100, max(0, $percent));