Reputation: 23554
I'm trying to 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!
Upvotes: 17
Views: 24802
Reputation: 1
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.
Upvotes: 0
Reputation: 43548
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.
Upvotes: 6
Reputation: 73011
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.
Upvotes: 3
Reputation: 18859
No, that's not possible. The following, however, is possible:
$e = $this->return_errors();
return ( !$e ) ? '' : array( false, $e );
Hope that helps.
Upvotes: 0
Reputation: 12934
No it's not possible, and it's also pretty confusing as compared to:
if($e) {
return array('false', $e);
}
Upvotes: 3