【问题标题】:Using return in ternary operator在三元运算符中使用 return
【发布时间】:2011-09-10 02:45:11
【问题描述】:

我正在尝试在三元运算符中使用 return,但收到错误:

Parse error: syntax error, unexpected T_RETURN 

代码如下:

$e = $this->return_errors();
(!$e) ? '' : return array('false', $e);

这可能吗?

谢谢!

【问题讨论】:

    标签: php conditional-operator


    【解决方案1】:

    这是正确的语法:

    return  !$e ? '' : array('false', $e);
    

    【讨论】:

    • 我认为这不是 OP 示例的预期结果。这将在两种情况下都返回,而 OP 可能只在其中一种情况下询问如何返回。
    • 正确,但它不能那样工作。因为它是一个语句并且不能嵌套在三元中,所以总是会返回一个三元的东西。
    【解决方案2】:

    关闭。 你会想要return condition?a:b

    【讨论】:

      【解决方案3】:

      它不适用于大多数语言,因为return 是一个语句(如ifwhile 等),而不是可以嵌套在表达式中的运算符。按照相同的逻辑,您不会尝试在表达式中嵌套 if 语句:

      // invalid because 'if' is a statement, cannot be nested, and yields no result
      func(if ($a) $b; else $c;); 
      
      // valid because ?: is an operator that yields a result
      func($a ? $b : $c); 
      

      它也不适用于 breakcontinue

      【讨论】:

        【解决方案4】:

        不,这是不可能的,与以下相比,这也很令人困惑:

        if($e) {
            return array('false', $e);
        }
        

        【讨论】:

          【解决方案5】:

          没有。但是您可以为 return 语句使用三元表达式。

          return (!$e) ? '' : array('false', $e);
          

          注意:这可能不是我们想要的逻辑。我提供它作为一个例子。

          【讨论】:

            【解决方案6】:

            不,这是不可能的。但是,以下是可能的:

            $e = $this->return_errors();
            return ( !$e ) ? '' : array( false, $e );
            

            希望对您有所帮助。

            【讨论】:

              【解决方案7】:

              扑通一声,

              如果你想用三元修改你的回报?

              完全有可能。

              在这个例子中,我有一个带有参数数组的函数。 此示例函数用于解析用户数组。 返回时,我有一个包含用户 ID 和用户名的数组。 但是如果我没有任何用户会发生什么?

              <?php
              
              public funtion parseUserTable(array $users) {
                 $results = [];
                 foreach ($users as $user) {
                    $results[$users['id']] = $user['username'];
                 }
                return $results ?: array('false', $e, "No users on table."); // Ternary operator.
              }
              

              对不起,我的英语不好,我是法国用户哈哈。

              N-D.

              【讨论】:

              • 您的帖子没有回答 OP 问题。您应该按照 OP 在其问题中提供的代码示例进行修复。而且,这个问题很老,已经有很多答案了。似乎OP忘记接受其中之一。但是您可以尝试通过添加有关 :? 运算符的文档来提供更好的答案。
              猜你喜欢
              • 2016-06-28
              • 2011-04-24
              • 2021-07-18
              • 2018-05-30
              • 1970-01-01
              • 2013-07-06
              • 1970-01-01
              • 2020-11-23
              相关资源
              最近更新 更多