PHP-您使用哪种编码风格的三元运算符?
如果很短,我将其放在一行中。 最近,我一直在将这种样式用于较长或嵌套的三元运算符表达式。 一个人为的例子:
$value = ( $a == $b )
? 'true value # 1'
: ( $a == $c )
? 'true value # 2'
: 'false value';
您个人使用哪种样式,或者最易读?
编辑:(关于何时使用三元运算符)
我通常避免使用2个以上级别的三元运算符。 当我在PHP模板脚本中回显变量时,我倾向于2级深三元运算符而不是2级if-else。
15个解决方案
87 votes
通常应避免使用三元运算符,但是这种形式可以很容易理解:
result = (foo == bar) ? result1 :
(foo == baz) ? result2 :
(foo == qux) ? result3 :
(foo == quux) ? result4 :
fail_result;
这样,将条件和结果保持在同一行上,就可以轻松浏览并了解正在发生的事情。
Simon Howard answered 2020-01-03T00:15:11Z
77 votes
我尽量不要使用三元运算符来编写嵌套条件。 它缺乏可读性,并且比使用条件语句没有任何额外的价值。
仅当它可以放在一行上并且它的含义很清楚时,我才使用它:
$value = ($a < 0) ? 'minus' : 'plus';
Tomalak answered 2020-01-03T00:15:35Z
24 votes
就个人而言,我只在三行运算符适合一行时使用。 如果需要跨度,那么该是个好时机了
if else if else
biozinc answered 2020-01-03T00:15:55Z
15 votes
我有时会使用的一种样式,因为没有被提及,所以我提出来的样式是这样的:
$result = ($x == y)
? "foo"
: "bar";
..但通常仅将它们全部放在一行上会使其过长。 我发现将= ? :全部排列起来看起来更整洁。
nickf answered 2020-01-03T00:16:20Z
14 votes
PHP嵌套三元运算符的行为有所不同。
此语法通过了以下所有测试。基于[http://deadlytechnology.com/web-development-tips/php-ternary-syntax/]
$myvar = ($x == $y)
?(($x == $z)?'both':'foo')
:(($x == $z)?'bar':'none');
。
参见:[http://au.php.net/ternary]
示例#3“非显而易见的三元行为”说明了以下原因在PHP中不起作用的原因。
$x = 1;
$y = 2;
$z = 3;
$myvar = ($x == $y)
? "foo"
: ($x == $z)
? "bar"
: "none";
$myvar == 'none'; // Good
$x = 1;
$y = 2;
$z = 1;
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";
$myvar == 'bar'; // Good
$x = 1;
$y = 1;
$z = 3;
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";
$myvar == 'bar'; // Bad!
$x = 1;
$y = 1;
$z = 1;
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";
$myvar == 'bar'; // Bad!
Chris Jacob answered 2020-01-03T00:16:58Z
10 votes
三元运算符是编写简单if语句的有效方法。 它们不应嵌套或难以阅读。 切记:您只编写一次软件,但被读取100次。 它应该比阅读容易阅读。
Rick Kierner answered 2020-01-03T00:17:18Z
4 votes
我倾向于将条件放在括号中:(a == b)? 1:0
Guillaume Gervais answered 2020-01-03T00:17:38Z
2 votes
我不同意这种普遍看法。 我的条件运算符风格有点像Imran。 如果整齐地放在一行上,我将其放在一行上。 如果它不能完全适合一行,我会破坏它,但是我只使用一个制表符(4个空格;我将VS设置为为制表符插入空格)作为缩进。 我不会立即跳转到if-else,因为很多时候条件运算符在上下文上更有意义。 (但是,如果在上下文上没有意义,那么我就不使用它。)
另外,我不嵌套条件运算符。 到那时,我确实觉得太难读了,是时候使用较为详细的if656-68568550645574657样式了。
John Rudy answered 2020-01-03T00:18:03Z
1 votes
“人为设计的示例”是我如何缩进,除了我会从左边距缩进,而不是基于(或上面一行中的任何内容)。
对于三元批评者-可读性是重点。 如果您不认为它使代码更具可读性,请不要使用它。 但是我发现至少在某些时候情况恰恰相反。
ysth answered 2020-01-03T00:18:28Z
1 votes
三元条件可以使代码更简洁,更优雅,最重要的是,可以帮助您将重点放在正确的事情上,避免重复。 考虑使用它们,但不要因此而使代码的可读性降低。 在VB.NET中:
'before refactoring
If x = 0 Then ' If-Then-Else puts emphasis on flow control
label = "None"
Else
label = Foo.getLabel(x) ' If-Then-Else forces repeat of assignment line
End If
'after refactoring
label = If(x = 0, "None", Foo.getLabel(x)) ' ternary If puts emphasis on assignment
请注意,“可读性较差”与“我不习惯看到它”不同。
Patrick Szalapski answered 2020-01-03T00:18:53Z
0 votes
我不使用它。 在我看来,它总是想节省空间并输入源代码,而期望小型源==更高效的编译代码。
我觉得它根本不可读,但这主要是因为我从未使用过它。
Tim answered 2020-01-03T00:19:18Z
0 votes
我倾向于根本不使用三元运算符,因为我发现..否则更具可读性。
SmacL answered 2020-01-03T00:19:38Z
0 votes
伊姆兰,您已经用漂亮的格式格式化了。 但是,当您嵌套两个以上时,三元运算符的确会变得不可读。 if-else块可能会给您带来更高层次的可理解嵌套。 除此之外,使用函数或表驱动的编程。
Yuval F answered 2020-01-03T00:19:58Z
0 votes
$foo = (isset($bar)) ? $bar : 'default';
answered 2020-01-03T00:20:13Z
0 votes
我个人仅将其用于分配变量(在Java中),例如:
String var = (obj == null) ? "not set" : obj.toString();
和(其他示例)在使用不允许使用空参数的函数时,例如:
String val; [...]
int var = (val == null) ? 0 : Integer.parseInt(val);
Vinze answered 2020-01-03T00:20:38Z