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