Неверные возвращаемые типы в PHP7

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 (есть только несколько отсталых несовместимых изменений, которые вы должны проверить)