Обнуляемые типы возврата в PHP7

PHP 7 вводит декларации возвращаемого типа. Это означает, что теперь я могу указать, что возвращаемое значение — это определенный класс, интерфейс, массив, вызываемый или один из вновь включаемых скалярных типов, что возможно для параметров функции.

function returnHello(): string {
return 'hello';
}

Часто случается, что значение присутствует не всегда, и вы можете вернуть что-то типа или null. В то время как вы можете сделать параметры обнуляемыми, установив их по умолчанию на ноль (DateTime $time = null), похоже, нет способа сделать это для возвращаемых типов. Это действительно так, или я как-то не понимаю, как это сделать? Эти не работают:

function returnHello(): string? {
return 'hello';
}

function returnHello(): string|null {
return 'hello';
}

113

Решение

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));
}
183

Другие решения

Обнуляемые типы доступны в PHP 7.1.

Это пример синтаксиса:

public function getName(): ?string
{
return $this->name; // name can be null
}

PHP 7.1 теперь GA, и вы можете обновить с PHP 7.0 (есть только несколько назад несовместимых изменения что надо проверить)

51

По вопросам рекламы [email protected]