PHP7中可为空的返回types

PHP 7引入了返回types声明 。 这意味着我现在可以指示返回值是一个特定的类,接口,数组,可调用的或新的可标注的标量types之一,这对于函数参数是可能的。

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

通常情况下,一个值并不总是存在的,你可能会返回某种types的值,或者返回null。 虽然可以通过将参数的默认值设置为null( DateTime $time = null )来使参数为空,但是对于返回types似乎没有办法做到这一点。 确实如此,或者我不知道如何去做? 这些不起作用:

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

PHP 7.1现在支持可空的返回types 。 我链接到的第一个RFC是他们去的那个:

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

老回答:

因为我的评论其实是对这个问题的回答:

PHP 7目前还不支持可为空的返回types,但是有一个RFC可以解决这个问题,它的目标是登陆PHP 7.1。 如果通过,语法将影响所有types提示(返回types和types提示):

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

还有一个竞争性的RFC添加联合types,这将能够做同样的事情,但看起来不同:

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

或者只是返回一个空string与返回types一致,并检查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)); } 

可空types在PHP 7.1中可用。

这是一个语法示例:

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

PHP 7.1现在是GA,你可以从PHP 7.0升级(只有less数向后不兼容的更改 ,你必须检查)