<?
$percent = 105;
$percent = ($percent > 100) ? 100 :
($percent < 0) ? 0 : $percent;
echo $percent;
?>
为什么这回音0?我正在查看我编写的JavaScript代码,并发现逻辑没有区别。
答案 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));