PHP 7 wprowadza deklaracje typu zwracanego . Oznacza to, że mogę teraz wskazać, że zwracana wartość jest pewną klasą, interfejsem, tablicą, możliwością wywołania lub jednym z nowo wskazanych typów skalarnych, co jest możliwe w przypadku parametrów funkcji.
function returnHello(): string {
return 'hello';
}
Często zdarza się, że wartość nie zawsze jest obecna i możesz zwrócić coś pewnego typu lub wartość null. Chociaż można ustawić parametry null, ustawiając ich wartość domyślną na null ( DateTime $time = null
), nie wydaje się, aby można to zrobić w przypadku typów zwracanych. Czy tak jest w istocie, czy w jakiś sposób nie znajduję, jak to zrobić? Te nie działają:
function returnHello(): string? {
return 'hello';
}
function returnHello(): string|null {
return 'hello';
}
php
nullable
return-type
type-hinting
php-7
Jeroen De Dauw
źródło
źródło
function returnString(?string $stringNull) : ?string { return $stringNull;}
Trowable
interfejsu PHP7 (a konkretnie rozszerzenieTypeError
)Odpowiedzi:
PHP 7.1 obsługuje teraz typy zwracane wartości null . Pierwszy dokument RFC, z którym się połączyłem, to ten, do którego się udali:
stara odpowiedź:
Ponieważ mój komentarz był właściwie odpowiedzią na pytanie:
PHP 7 nie obsługuje jeszcze zwracanych typów zwracanych wartości null, ale istnieje wyjście RFC , które to rozwiązuje, ma na celu wylądowanie w PHP 7.1. Jeśli się powiedzie, składnia wpłynie na wszystkie wskazówki dotyczące typu (zarówno typy zwracane, jak i wskazówki dotyczące typu):
Istnieje również konkurencyjny RFC do dodawania typów związków, które mogłyby zrobić to samo, ale wyglądałyby inaczej:
Na razie jednak musisz napisać:
Lub po prostu zwróć pusty ciąg, aby był zgodny z zwracanym typem, i sprawdź fałszywą wartość:
źródło
PHP 7 won't support nullable return-types just yet, but there's an RFC out to address just that
- tak, RFC, „jeszcze”. Nie zrozum mnie źle - jestem naprawdę ciężkim użytkownikiem PHP od czasu naprawdę kiepskiego PHP3 do teraz, żadnych luk, ale kiedy zobaczyłem wszystkie te RFC, które odrzucili dla 7, odniosłem wrażenie, że po prostu "WTF ?!". Użytkownicy widzą bałagan i są skłonni posprzątać go w sposób zgodny z poprzednimi wersjami i po prostu otrzymują „nie”. Czyste metody nazewnictwa bałagan? Naprawiononull
brak bycia zbyt wyjątkowym obywatelem? Nie, nie jest potrzebne. Dodać opcję rozróżniania wielkości liter? Nie… A potem niespodzianka, że ludzie się zmieniają.var
). Szkoda, że zamiast tego zaakceptowali zbyt wieleTypy dopuszczające wartość null są dostępne w PHP 7.1.
Oto przykład składni:
PHP 7.1 jest teraz GA i możesz zaktualizować PHP 7.0 (jest tylko kilka wstecznie niekompatybilnych zmian , które musisz sprawdzić)
źródło
Działa z każdym typem.
Przykład:
źródło