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

问题描述 投票:1回答:1

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。

php php-7
1个回答
0
投票

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

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

如果您声明正在使用strict_types,则该方法甚至不接受'12345'123.5,而仅接受适当的intnull值。

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

protected function getMarketId():?int
{
    return $this-marketId;
}

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

© www.soinside.com 2019 - 2024. All rights reserved.