为可为空的函数参数提供“null”时如何使用默认值?
Posted
技术标签:
【中文标题】为可为空的函数参数提供“null”时如何使用默认值?【英文标题】:How to use default value when `null` is given for a nullable function parameter? 【发布时间】: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 和许多其他语言中,它只是另一种类型/值。
【参考方案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 确实可以简化。以上是关于为可为空的函数参数提供“null”时如何使用默认值?的主要内容,如果未能解决你的问题,请参考以下文章
退出构造函数时,不可为空的属性必须包含非空值。考虑将属性声明为可为空
将可为空的 DateTime 字段更新为 null 会导致默认 DateTime 值 (0001-01-01 00:00:00.0000000)
在 clickhouse 中,使用强制转换函数时如何为可为空的列返回 null
c# nullable double to actionscript NaN through fluorine gateway