php函数参数 中的 ?string $a;和?string $a=null区别,为什么?string $a;不传递参数报错

更新时间:2024-03-30 04:19

在PHP中,?string $a和?string $a = null定义了函数的参数,允许参数类型为 string 或者 null。区别在于默认值的设置。
?string $a: 这表明 $a 可以是 string 类型也可以是 null,但是调用函数时必须显式地传递一个值给 $a,哪怕是传递一个 null 值。
?string $a = null: 这不仅表明 $a 可以是 string 或 null,而且如果在调用函数时没有传递 $a 参数,它会自动使用默认值 null。 当你声明了类型为 ?string 的参数 $a,但是在调用函数时没有传递任何值给 $a,PHP会报错因为它期待有一个值(即使是 null),而不是没有参数。如果你希望参数是可选的并且默认为 null,就应该在声明时指定默认值 null。

简单来说一个是针对传递的参数值本身,一个针对参数是否设置,就像isset和isnull。


可以参考dart语言的可选位置参数,为什么这样设计了。

https://dart.dev/language/functions#named-parameters