2011-06-07 79 views
15

回报我试图使用三元操作符的回报,但收到一个错误:使用在三元运算符PHP

Parse error: syntax error, unexpected T_RETURN 

下面的代码:

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

这可能吗?

谢谢!

回答

6

它在大多数语言中不起作用,因为return是一个语句(如if,while等),而不是可以嵌套在表达式中的运算符。按照同样的逻辑,你就不会尝试拼图的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正常工作。

2

不,这是不可能的,而且它也非常令人迷惑相比:

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

这是正确的语法:

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

我不认为这是OP的例子的预期结果。这将在两种情况下都会返回,而OP可能只是在其中一种情况下询问如何返回。 – 2011-06-07 14:03:29

+1

没错,但它不会那样工作。因为它是一个声明并且不能嵌套在一个三元组中,所以总是会返回一个三元组。 – CommandZ 2014-02-22 03:10:36

0

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

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

希望有所帮助。

6

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

+0

+1作为新用户。不要忘记格式化你的代码:) – 2011-06-07 14:03:41

1

不,但你可以有一个return陈述的三元表达式。

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

注:这可能不是所期望的逻辑。我提供它作为一个例子。