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

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

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

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

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

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

2 ответов


в PHP 7.1 теперь поддерживает nullable возвращаемые типы. Первый документ RFC я связан с одним они шли на:

function nullOrString(int $foo) : ?string
{
    return $foo%2 ? "odd" : null;
}

ответ:

так как мой комментарий был фактически ответом на вопрос:

PHP 7 пока не поддерживает nullable return-types, но есть 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 доступны в PHP 7.1.

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

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

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