Использование return в троичном операторе - PullRequest
15 голосов
/ 07 июня 2011

Я пытаюсь использовать return в тройном операторе, но получаю ошибку:

Parse error: syntax error, unexpected T_RETURN 

Вот код:

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

Возможно ли это?

Спасибо!

Ответы [ 7 ]

22 голосов
/ 07 июня 2011

Это правильный синтаксис:

return  !$e ? '' : array('false', $e);
9 голосов
/ 07 июня 2011

Закрыть.Вы бы хотели return condition?a:b

6 голосов
/ 07 июня 2011

Это не работает в большинстве языков, потому что 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); 

Это не будет работать и для break и continue.

2 голосов
/ 07 июня 2011

Нет, это невозможно, и это также довольно запутанно по сравнению с:

if($e) {
    return array('false', $e);
}
1 голос
/ 07 июня 2011

Нет. Но вы можете иметь троичное выражение для оператора return.

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

Примечание: Возможно, это не требуемая логика. Я привожу это в качестве примера.

0 голосов
/ 15 марта 2019

Plop,

если вы хотите изменить ваш возврат с троичным?

это вполне возможно.

В этом примере у меня есть функция с массивом в параметрах. Эта примерная функция используется для разбора массива пользователей. По возвращении у меня есть массив с идентификатором пользователя и именем пользователя. Но что произойдет, если у меня нет пользователей?

<?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.
}

Извините за мой плохой английский, я французский пользователь, ха-ха.

N-Д.

0 голосов
/ 07 июня 2011

Нет, это невозможно.Однако возможно следующее:

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

Надеюсь, это поможет.

...