PHP 7 вводит декларации типа возвращаемого типа . Это означает, что теперь я могу указать, что возвращаемое значение – это определенный класс, интерфейс, массив, вызываемый или один из новых типов подсказок, как это возможно для параметров функции.
function returnHello(): string { return 'hello'; }
Часто бывает, что значение не всегда присутствует и что вы можете возвращать либо что-то определенного типа, либо null. Хотя вы можете сделать параметры нулевыми, установив их значение по умолчанию равным null ( DateTime $time = null
), похоже, не существует способа сделать это для возвращаемых типов. Это действительно так, или я как-то не нахожу, как это сделать? Они не работают:
function returnHello(): string? { return 'hello'; } function returnHello(): string|null { return 'hello'; }
PHP 7.1. Теперь поддерживает типы возвращаемых значений . Первый RFC, с которым я связан, – это тот, за который они пошли:
function nullOrString(int $foo) : ?string { return $foo%2 ? "odd" : null; }
Поскольку мой комментарий был фактически ответом на вопрос:
PHP 7 не будет поддерживать только возвращаемые типы возвращаемых значений, но есть RFC для решения именно этого, он нацелен на землю в PHP 7.1. Если он пройдет, синтаксис затем повлияет на все типы-подсказки (как возвращаемые типы, так и типы-подсказки):
public function returnStringOrNull(?array $optionalArray) : ?string { if ($optionalArray) { return implode(', ', $optionalArray);//string returned here } return null; }
Существует также конкурирующий RFC для добавления типов профсоюзов, которые могли бы делать то же самое, но выглядели бы иначе:
public function returnStringOrNull(array|null $optionalArray) : string|null { if ($optionalArray) { return implode(', ', $optionalArray);//string returned here } return null; }
Пока же вам придется писать:
public function returnStringOrNull( array $optionalArray = null) { if ($optionalArray) { return implode(', ', $optionalArray); } }
Или просто верните пустую строку, чтобы она соответствовала типу возвращаемого значения, и проверьте значение фальши:
public function returnStringOrNull( array $optionalArray = null) : string { if ($optionalArray) { return implode(', ', $optionalArray); } return ''; } //call $string = $x->returnStringOrNull(); if (!$string) { $string = $x->returnStringOrNull(range(1, 10)); }
Nullable Types доступны в PHP 7.1.
Это пример синтаксиса:
public function getName(): ?string { return $this->name; // name can be null }
PHP 7.1 теперь GA, и вы можете обновить его с PHP 7.0 (есть только несколько отсталых несовместимых изменений, которые вы должны проверить)