Типы возвращаемых значений 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); } }или просто верните пустую строку, чтобы она соответствовала возвращаемому типу, и проверьте 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