I'm trying t开发者_JS百科o use return in a ternary operator, but receive an error:
Parse error: syntax error, unexpected T_RETURN
Here's the code:
$e = $this->return_errors();
(!$e) ? '' : return array('false', $e);
Is this possible?
Thanks!
This is the correct syntax:
return !$e ? '' : array('false', $e);
Close.
You'd want return condition?a:b
It doesn't work in most languages because return
is a statement (like if
, while
, etc.), rather than an operator that can be nested in an expression. Following the same logic you wouldn't try to nest an if
statement within an expression:
// 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);
It wouldn't work for break
and continue
as well.
No it's not possible, and it's also pretty confusing as compared to:
if($e) {
return array('false', $e);
}
No. But you can have a ternary expression for the return
statement.
return (!$e) ? '' : array('false', $e);
Note: This may not be the desired logic. I'm providing it as an example.
No, that's not possible. The following, however, is possible:
$e = $this->return_errors();
return ( !$e ) ? '' : array( false, $e );
Hope that helps.
Plop,
if you want modify your return with ternary ?
it's totally possible.
In this exemple, i have a function with array in parameters. This exemple function is used to parse users array. On return i have an array with user id and user username. But what happens if I do not have any users?
<?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.
}
Sorry for my bad english, i'm french user haha.
N-D.
精彩评论