PHP -新对象的默认函数参数



我正在尝试创建一个具有可选参数的函数,如果参数未传递,则默认为空Laravel Collection。

我试过以下方法:

function myFunction(string $string, Collection $collection = [])

结果:不能使用数组作为集合对象的默认参数

function myFunction(string $string, Collection $collection = collect([]))

结果:常量表达式包含无效操作

function myFunction(string $string, Collection $collection = new Collection)

结果:常量表达式包含无效操作

我能做的是:

function myFunction(string $string, Collection $collection = null){
$collection = $collection ?? new Collection;
}

有没有更好的方法来做这件事,或者我应该坚持我所拥有的?

我会贴出答案,因为我认为这已经足够清楚了。

例#6使用非标量类型作为默认值section":

默认值必须是常量表达式,而不是(例如a)变量、类成员或函数调用

所以不,你不能使用对象作为默认值。你最后的例子似乎是你能做的最好的了。

如上所述,我建议将变量设置为空,以避免在有人显式传递null时出现致命错误。

function myFunction(string $string, ?Collection $collection = null){
$collection = is_null($collection) ? new Collection : $collection;
}

最新更新