dzm
dzm

Reputation: 23554

Using return in ternary operator

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

Answers (7)

Nova-Dev
Nova-Dev

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

Blagovest Buyukliev
Blagovest Buyukliev

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

Sysyphus
Sysyphus

Reputation: 1061

Close. You'd want return condition?a:b

Upvotes: 14

Jason McCreary
Jason McCreary

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

Berry Langerak
Berry Langerak

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

ioseb
ioseb

Reputation: 16951

This is the correct syntax:

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

Upvotes: 31

Dan Breen
Dan Breen

Reputation: 12934

No it's not possible, and it's also pretty confusing as compared to:

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

Upvotes: 3

Related Questions