您使用哪种编码方式用于三元运算符?

Imr*_*ran 53 php language-agnostic coding-style ternary-operator

如果它很短,我会保持单线.最近我一直在使用这种风格用于更长或嵌套的三元运算符表达式.一个人为的例子:

$value = ( $a == $b ) 
            ? 'true value # 1'
            : ( $a == $c )
                ? 'true value # 2'
                : 'false value';
Run Code Online (Sandbox Code Playgroud)

个人你使用哪种风格,或找到最可读的?

编辑:( 何时使用三元运算符)

我通常避免使用超过2级深度三元运算符.当我在PHP模板脚本中回显变量时,我倾向于更喜欢2级深度三元运算符而不是2级.

Sim*_*ard 87

通常要避免使用三元运算符,但这种形式可以很容易阅读:

  result = (foo == bar)  ? result1 :
           (foo == baz)  ? result2 :
           (foo == qux)  ? result3 :
           (foo == quux) ? result4 : 
                           fail_result;
Run Code Online (Sandbox Code Playgroud)

通过这种方式,条件和结果在同一条线上保持在一起,并且很容易撇下并了解正在发生的事情.

  • 如果我必须这样使用它,我会使用switch语句. (46认同)
  • 在这种特殊情况下,您可以使用switch语句,因为它们是==比较,但它们可以是任何表达式.在一般情况下,并不总是可以使用switch语句. (14认同)
  • "通常要避免使用三元运算符" - 为什么?这似乎更像是一种观点,而不是一种规则.在许多情况下,三元运算符是一个有用的工具,其中if-else看起来有点矫枉过正.也许我们也应该避免PHP,因为人们也不知道如何正确使用它? (10认同)
  • 这个结构需要更多的括号才能在PHP中正常工作! (6认同)
  • @rmeador:那么你正在考虑像lisp的COND这样的东西吗?(setq foo 3)(cond((> = foo 4)'result1)((= foo 3)'result2)((= foo 2)'result3)((<= foo 1)'result4))返回result2. (2认同)
  • @pilsetnieks,三元运算符有返回值。Switch 语句则不然。在上面的代码中,总是会定义“result”。接下来的代码可以依赖于此。在 switch 语句中,“结果”不太可靠,因为它取决于每个单独的 switch 情况。 (2认同)

Tom*_*lak 77

我尽量不使用三元运算符来编写嵌套条件.它无视可读性,并且在使用条件时没有提供额外的价值.

只有它可以放在一条线上,并且它的结晶清晰意味着什么,我用它:

$value = ($a < 0) ? 'minus' : 'plus';
Run Code Online (Sandbox Code Playgroud)

  • 100%同意.并且仅当运算符用作单个语句时,并且仅在少于80个字符(包括缩进)时使用.在之前的雇主,前一个领导开发人员喜欢在1k echo语句中使用三元op.邪恶.我在该代码库中完全取消了它的使用. (8认同)
  • 42赞成!这是神圣的. (3认同)

bio*_*inc 24

就个人而言,我只使用三元运算符,如果它适合一行.如果它需要跨越,那么现在是时候了

if else if else
Run Code Online (Sandbox Code Playgroud)


nic*_*ckf 16

有时会使用的一种风格,因为它没有被提及,我提出的是这样的:

$result = ($x == y)
        ? "foo"
        : "bar";
Run Code Online (Sandbox Code Playgroud)

..但通常只有将它全部放在一条线上才能使它太长.我发现= ? :全部排队使它看起来更整洁.


Chr*_*cob 15

PHP嵌套三元运算符的行为不同.

此语法通过以下所有测试.基于http://deadlytechnology.com/web-development-tips/php-ternary-syntax/

$myvar = ($x == $y)
?(($x == $z)?'both':'foo')
:(($x == $z)?'bar':'none');
Run Code Online (Sandbox Code Playgroud)

.

请参阅: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!
Run Code Online (Sandbox Code Playgroud)

  • 谨慎!PHP中嵌套的三元组是一个棘手的野兽.可能建议避开它们,但我们都喜欢狡猾地骰子. (2认同)

Ric*_*ner 10

三元运算符是编写简单if语句的简短有效方法.它们不应嵌套或难以阅读.请记住:您只需编写一次软件,但会被读取100次.它应该比写入更容易阅读.


Gui*_*ais 5

我倾向于将条件括在括号中: (a == b) ? 1 : 0