Nullable return types in PHP7

PHP 7 wprowadza deklaracje typu return . Co oznacza, że mogę teraz wskazać, że zwracana wartość jest pewną klasą, interfejsem, tablicą, wywoływalną lub jednym z nowo zdefiniowanych typów skalarnych, jak to jest możliwe dla parametrów funkcji.

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

Często zdarza się, że wartość nie zawsze jest obecna i możesz zwrócić coś jakiegoś typu lub null. Chociaż można ustawić parametry jako NULL, ustawiając ich wartość domyślną na null (DateTime $time = null), nie wydaje się, aby można było to zrobić to dla typów zwrotnych. Czy rzeczywiście tak jest, czy jakoś Nie wiem, jak to zrobić? Nie działają:

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

function returnHello(): string|null {
    return 'hello';
}
Author: Jeroen De Dauw, 2015-11-09

2 answers

PHP 7.1 obsługuje teraz nullable return types . Pierwsze RFC, do którego się podlinkowałem, to ten, do którego poszli:

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

Stara odpowiedź:

Ponieważ mój komentarz był właściwie odpowiedzią na pytanie:

PHP 7 jeszcze nie obsługuje nullable return-types, ale istnieje RFC , aby rozwiązać ten problem, ma wylądować w PHP 7.1. Jeśli przejdzie, składnia wpłynie na wszystkie podpowiedzi typu (zarówno typy zwrotne, jak i podpowiedzi typu):

public function returnStringOrNull(?array $optionalArray) : ?string
{
    if ($optionalArray) {
        return implode(', ', $optionalArray);//string returned here
    }
    return null;
}

Jest też a konkurencyjne RFC , aby dodać typy Unii, które byłyby w stanie zrobić to samo, ale wyglądałyby inaczej:

public function returnStringOrNull(array|null $optionalArray) : string|null
{
    if ($optionalArray) {
        return implode(', ', $optionalArray);//string returned here
    }
    return null;
}

Na razie jednak musisz napisać:

public function returnStringOrNull( array $optionalArray = null)
{
    if ($optionalArray) {
        return implode(', ', $optionalArray);
    }
}

Lub po prostu zwróć pusty łańcuch, aby był zgodny z typem return i sprawdź wartość falsy:

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));
}
 162
Author: Elias Van Ootegem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-26 22:43:35

Typy Nullable są dostępne w PHP 7.1.

To jest przykład składni:

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

PHP 7.1 jest teraz GA i możesz uaktualnić z PHP 7.0 (jest tylko kilka wstecznie niekompatybilnych zmian , które musisz sprawdzić)

 45
Author: the_nuts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-02 07:44:39