PHP中以下四种函数定义方式有何区别?
PHP中四种函数定义方式的区别
下面逐一拆解四种写法的核心差异:
1. function some_func(string|null $some_arg)
- 这是PHP 8.0引入的联合类型声明,明确限定参数
$some_arg的类型只能是string或null - 参数必须显式传入,不能省略;不传参数会直接触发报错
- 合法调用:
some_func('hello')、some_func(null);非法调用:some_func()
2. function some_func(?string $some_arg)
- 这是
string|null联合类型的语法糖,功能和第一种完全一致 - 写法更简洁,语义无区别:参数必须传入,类型只能是
string或null - 同样,
some_func()属于非法调用,仅传入string或null才合法
3. function some_func(string $some_arg = null)
- 参数是可选参数,调用时不传参则使用默认值
null - 类型声明为
string,但因默认值是null,PHP会隐式允许传入null(无需显式声明nullable类型) - 合法调用:
some_func()、some_func('world')、some_func(null) - 特点:语义相对隐晦,需通过默认值推断参数允许
null,严格类型模式下行为与第四种一致
4. function some_func(?string $some_arg = null)
- 这是显式nullable类型+可选参数的组合,语义最清晰
- 参数可选,不传参时用默认值
null;传参时允许string或null - 合法调用与第三种完全一致,但写法直接明确参数允许
null,无需依赖默认值推断 - 优势:在团队协作或大型项目中,可读性和维护性更强
内容的提问来源于stack exchange,提问作者Singleton
相关产品推荐
相关产品推荐

