使用“?”的参数和类型声明用于可空值

时间:2019-12-04 17:15:40

标签: php php-7

PHP版本7.3.8

参考: https://www.php.net/manual/en/functions.returning-values.php#functions.returning-values.type-declaration

我已经在上一页中阅读了这句话:

  

从PHP 7.1.0开始,可以通过在类型名称前添加问号(?)来将返回值标记为可为空。这表示该函数返回指定的类型或NULL。

传递了以下值,并在此处记录了结果:

$marketID = 'abcdef'; // Result is: Throws a type error.
$marketID = '12345';  // Result is: It will be cast as an int.
$marketID = 12345;    // Result is: It will successfully execute.
$marketID = null;     // Result is: It will successfully execute.

//应用程序控制器

protected function setMarketID(?int $marketID)
{
    $this->marketID = $marketID;
    return $this;
}

protected function getMarketID()
{
    // Will return an int or null.
    return $this->marketID;
}

这样的代码被认为可以接受吗? IE:以这种方式使用(?)来接受类型和null,因为可以将手动状态返回值标记为...不是传入值,但是可以吗? (请参阅编辑)

为以后阅读的任何人编辑:

//将返回一个int或null。
如果将int参数传递给setter,则getter将自动返回int;如果将null参数传递给setter,则getter将自动返回null。

@yivi

是的,非常有帮助,谢谢。我添加了严格的类型,并且效果很好,并且我还添加了关于声明返回值的建议。 IE:

protected function getMarketId():?int

再次完美运行。

1 个答案:

答案 0 :(得分:1)

您未在示例中声明单个返回类型。

setMarketId()中,您声明了一个参数类型(?int)。因此,此方法将接受整数或null。

如果您声明正在使用strict_types,则该方法甚至不会接受'12345'123.5,而只会接受适当的int或{{1} }值。

声明一个返回值,就像您期望的那样(并与null返回的值保持一致),可以这样完成:

getMarketId()

当然,声明类型可以为空是“可以接受的”。是否有意义,将完全取决于您的应用程序,但这是非常普遍的用法。