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