2011-06-07 49 views
15

Estoy intentando utilizar retorno en un operador ternario, pero recibirá un error:retorno en php operador ternario

Parse error: syntax error, unexpected T_RETURN 

está el código aquí:

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

Es esto posible?

Gracias!

Respuesta

6

No funciona en la mayoría de los idiomas porque return es una declaración (como , while, etc.), en lugar de un operador que se puede anidar en una expresión. Siguiendo la misma lógica que no se trataría de una declaración nido if dentro de una expresión:

// 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); 

que no funcionaría para break y continue también.

2

No, no es posible, y también es bastante confuso en comparación con:

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

Esta es la sintaxis correcta:

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

No creo que ese sea el resultado previsto del ejemplo del PO. Esto volverá en ambos casos, mientras que el OP probablemente pregunte cómo devolverlo en uno de los casos. –

+1

Correcto, pero no funciona de esa manera. Algo siempre será devuelto con un ternario ya que es una declaración y no puede ser anidado en un ternario. – CommandZ

0

No, eso no es posible. Lo siguiente, sin embargo, es posible:

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

Espero que ayude.

6

Cerrar. Desea return condition?a:b

+0

+1 como un nuevo usuario. No te olvides de formatear tu código :) –

1

No. Pero puede tener una expresión ternaria para la declaración return.

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

Nota: Esto puede no ser la lógica deseada. Lo estoy proporcionando como un ejemplo.

Cuestiones relacionadas