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

Arguments and type declarations using "?" for nullable values

PHP 版本 7.3.8

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

我一直在阅读上面页面上的这句话:

As of PHP 7.1.0, return values can be marked as nullable by prefixing the type name with a question mark (?). This signifies that the function returns either the specified type or 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:以这种方式使用 (?) 来接受类型和空值,因为手动状态 return 值可以被标记...不是传入值,但它有效吗? (请参阅编辑)

为以后阅读这篇文章的任何人编辑post:

// 将 return 一个 int 或 null。
如果您将 int 参数传递给 setter,则 getter 将自动 return 一个 int,如果您将 null 参数传递给 setter,则 getter 将自动return 空。

@yivi

是的,非常有帮助,谢谢。我添加了严格类型并且它工作得很好,我还添加了您关于声明 return 值的建议。即:

protected function getMarketId():?int

再次完美运行。

您还没有在示例中声明一个 return 类型。

您在 setMarketId() 中声明了一个参数类型 (?int)。所以此方法将接受整数或空值。

如果您声明您正在使用 strict_types,那么该方法甚至不会接受 '12345'123.5,并且只接受适当的 intnull值。

声明一个你期望的 return 值(并且与 getMarketId() 会 return 的值一致),将像这样完成:

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

当然是"acceptable"声明一个类型可以为空。它是否有意义将完全取决于您的应用程序,但这是一种非常常见的用法。