php 三目格式,PHP-您使用哪种编码风格的三元运算符?

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

你可能感兴趣的:(php,三目格式)