You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带类型提示的PHP可变参数函数无参调用为何不报错?

为什么带类型提示的PHP可变参数函数无参调用不报错?

这是因为PHP里的可变参数语法(...)本身就允许传入0个或多个对应类型的参数,和你理解的“必须传至少一个符合类型的参数”不是一回事。

具体来说:

  • Object ...$objects的含义是:接受0个或多个Object类型的参数,所有传入的参数会被打包成数组$objects。当你无参调用时,$objects就是一个空数组——空数组里没有不符合Object类型的元素,完全满足类型提示的约束,所以不会报错。
  • 类型提示在这里的作用是约束每个传入的参数必须是Object类型,而不是强制要求必须传参。如果你的业务逻辑需要至少一个参数,得自己在函数里加判断,比如:
    function setObjects(Object ...$objects)
    {
        if (empty($objects)) {
            throw new InvalidArgumentException("必须传入至少一个Object类型的参数");
        }
        // do something
    }
    

对比普通参数的情况:如果函数定义是function setObjects(Object $object),无参调用肯定会触发类型错误,因为这个参数是必填的且有类型约束。但可变参数的...语法改变了参数的可选性,允许0个输入。

内容的提问来源于stack exchange,提问作者Milan Maharjan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 19:36:20