带类型提示的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
相关产品推荐
相关产品推荐

