【发布时间】:2020-03-29 13:51:35
【问题描述】:
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
是的,非常有帮助,谢谢。我添加了严格的类型,它工作得很好,我还添加了您声明返回值的建议。即:
protected function getMarketId():?int
再次完美运行。
【问题讨论】:
-
虽然它们不是返回类型,但它是参数的类型。但是,是的,如果您希望它可以为空,您可以这样做。要声明返回类型,您可以使用
protected function getMarketID() ? int {(或者如果您希望它可以为空,protected function getMarketID() : ?int {