Типы возвращаемых значений 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';
}
607   2  

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

или просто верните пустую строку, чтобы она соответствовала возвращаемому типу, и проверьте falsy value:

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

Comments

    Ничего не найдено.