PHP版本7.3.8
我已经在上一页中阅读了这句话:
从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
再次完美运行。
答案 0 :(得分:1)
您未在示例中声明单个返回类型。
在setMarketId()
中,您声明了一个参数类型(?int
)。因此,此方法将接受整数或null。
如果您声明正在使用strict_types,则该方法甚至不会接受'12345'
或123.5
,而只会接受适当的int
或{{1} }值。
声明一个返回值,就像您期望的那样(并与null
返回的值保持一致),可以这样完成:
getMarketId()
当然,声明类型可以为空是“可以接受的”。是否有意义,将完全取决于您的应用程序,但这是非常普遍的用法。