【问题标题】:Arguments and type declarations using "?" for nullable values使用“?”的参数和类型声明对于可空值
【发布时间】:2020-03-29 13:51:35
【问题描述】:

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

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

protected function getMarketId():?int

再次完美运行。

【问题讨论】:

  • 虽然它们不是返回类型,但它是参数的类型。但是,是的,如果您希望它可以为空,您可以这样做。要声明返回类型,您可以使用protected function getMarketID() ? int {(或者如果您希望它可以为空,protected function getMarketID() : ?int {

标签: php php-7


【解决方案1】:

您的示例中没有声明单一的返回类型。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多