我正在尝试创建一个具有可选参数的函数,如果参数未传递,则默认为空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;
}