【问题标题】:How to use default value when `null` is given for a nullable function parameter?为可为空的函数参数提供“null”时如何使用默认值?
【发布时间】:2018-01-01 09:16:48
【问题描述】:

在 PHP 7.1 中调用以下函数时:

private function doStuff(?int $limit = 999) { }

语法如下:

doStuff(null);

$limit 的值变为null。所以我猜可以说$limit的值被显式设置为null

有什么办法可以克服吗? IE。当遇到空值(即缺少值)时,使用默认值,无论是隐式还是显式?

【问题讨论】:

  • 我认为隐含的意思是在没有参数的情况下调用函数dostuff(),这将采用默认值,如果你将null值发送给函数,我认为它不会自己取默认值,但你仍然可以在函数内部捕获它并通过代码设置默认值。
  • 只需在函数代码的第一行添加if(is_null($limit)) $limit = 999;
  • 不要使用参数,而是使用 dostuff(); 它将使用您在函数参数中设置的默认值
  • 你好像想要你的蛋糕却不吃它……?您将参数显式声明为可为空,这意味着您可以将null 作为其值而不是声明的类型或其默认值 传递。这正是发生的事情。
  • 是的,SQL 中的NULL 有点在类型系统之外发挥作用。在 PHP 和许多其他语言中,它只是另一种类型/值。

标签: php null default-value php-7.1


【解决方案1】:

没有 PHP 没有“如果为 null,则回退到默认值”选项。你应该这样做:

private function dostuff(?int $limit = null) {
    // pre-int typehinting I would have done is_numeric($limit) ? $limit : 999;
    $limit = $limit ?? 999;
}

当您没有明智的做事价值时,请确保您选择dostuff()dostuff(999)

注意:还有反射来获取方法参数的默认值,但这似乎太多了。

但是方法如下:

 $m = new ReflectionFunction('dostuff');
 $default = $m->getParameters()[0]->getDefaultValue();
 dostuff($default);

【讨论】:

  • 更简单:$limit ?? 999
  • @NikiC 确实可以简化。
猜你喜欢
  • 2014-02-01
  • 2021-11-23
  • 2019-05-08
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
相关资源
最近更新 更多