【问题标题】:PHP - Default function argument to new objectPHP - 新对象的默认函数参数
【发布时间】:2021-02-23 22:24:27
【问题描述】:

我正在尝试创建一个带有可选参数的函数,如果没有传入该参数,则默认为一个空的 Laravel 集合。

我尝试了以下方法:

function myFunction(string $string, Collection $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;
}

有没有更好的方法来做到这一点,还是我应该坚持现有的?

【问题讨论】:

  • $collection = $collection ??新收藏;
  • @GiacomoM 谢谢我可以这样做,但希望找出是否可以在参数中完成
  • 在第二个例子中,为什么你使用 collect([]) 而不是 collect() (你不需要方括号)
  • @GiacomoM 不知道。认为它需要一个数组,所以传入一个空数组
  • 我认为你已经做到了最好的(目前)。我很想添加一个问号以允许显式传递空值。可能会保存一个致命错误。 , ?Collection $collection = null)

标签: php laravel


【解决方案1】:

我会发布一个答案,因为我认为它已经足够清楚了。

来自the docs,“示例#6 使用非标量类型作为默认值部分”部分:

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

所以不,您不能将对象用作默认值。你的最后一个例子似乎是你能做的最好的。

如上面的 cmets 中所述,我建议将变量设为可空,以避免在有人明确传递空值时出现致命错误。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-01
    • 2012-06-14
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 2012-11-14
    相关资源
    最近更新 更多