【发布时间】:2011-06-16 00:00:23
【问题描述】:
我很擅长使用 PHP 三元运算符。但是,我在试图弄清楚为什么下面的代码与 if-else 等效结构不匹配时遇到了障碍。测试在不同的数字上运行了 3 次。每个结构的输出都在代码下方。
三元:
$decimal_places = ($max <= 1) ? 2 : ($max > 3) ? 0 : 1;
三元输出:
最大值:-100000 十进制:0
最大值:0.48 十进制:0
最大值:0.15 十进制:0
如果-否则
if($max <= 1)
$decimal_places = 2;
elseif($max > 3)
$decimal_places = 0;
else
$decimal_places = 1;
If-Else 输出:
最大值:-100000 十进制:2
最大值:0.48 十进制:2
最大值:0.15 十进制:2
谁能告诉我为什么这两个控制结构不输出相同的数据?
【问题讨论】:
-
嵌套三元运算符不是一个好主意的一个原因
-
它们不是完全等价的,你知道的。整个elseif会在三元结构中短路。它们也不意味着嵌套。
-
From the PHP Manual on Ternary Operators:建议避免“堆叠”三元表达式。在单个语句中使用多个三元运算符时 PHP 的行为并不明显
-
@Mark Baker 我只尝试将它们嵌套在非常简单的语句中,因为我见过三元语句让你想做一些暴力的事情。
-
三元运算符的所有用法让我想做一些暴力的事情。添加它们的理由为零。人类阅读代码的次数远远超过编写代码的次数。正如您在问题中看到的那样,使用三元运算符等糟糕的构造使其“简洁”会增加错误并降低可维护性。
标签: php