php 7.0起支持参数类型声明,明确函数只接受指定类型值以提升健壮性与可读性;语法为类型紧邻变量名左侧,支持标量、复合、类/接口及可空类型(?前缀),需显式= null;strict_types=1启用严格模式禁用隐式转换。

PHP 参数类型声明从 PHP 7.0 开始支持标量类型,到 PHP 8.0 全面稳定可用。核心是明确告诉函数“只接受什么类型的值”,提升代码健壮性和可读性,避免隐式转换带来的意外行为。
基础语法:类型写在变量名前面
参数类型必须紧挨着参数名左侧,不能用冒号后置、括号包裹或放在变量名后面。
- ✅ 正确:
function getName(string $name, ?int $age = null): void - ❌ 错误:
function getName($name: string)(冒号后置,PHP 不识别) - ❌ 错误:
function getName(string($name))(语法非法) - ❌ 错误:
function getName($name): string(这是返回值类型,不是参数类型)
支持的类型与常见组合
可声明标量(string、int、float、bool)、复合(array、callable)、类名、接口名,以及可空类型。
-
可空类型:用
?前缀,如?string $desc,表示接受string或null -
默认值为 null:可空类型必须显式写
= null,仅写string $desc = null会报错 -
对象类型:直接写类名或接口名,如
User $user或LoggerInterface $logger
严格模式决定类型检查力度
是否启用严格模式,直接影响类型不匹配时的行为:
- 默认(非严格):PHP 尝试自动转换,比如把字符串
"123"转成整数123传给int $id - 开启严格模式:在文件顶部加
declare(strict_types=1);,此时类型必须完全一致,否则抛出TypeError - 注意:strict_types 是按文件生效的,每个需要严格检查的文件都得单独声明
默认值与类型声明的配合要点
默认值本身不改变类型约束逻辑,但影响调用方式和容错设计:
- 默认值只在参数被完全省略时生效;传了
null或空字符串,仍会进入函数体 - 若想统一处理未定义/为 null/为空的情况,推荐组合使用:
?string $name+ 函数内判空赋值(如$name ?? 'default') - 默认参数必须放在参数列表末尾,否则会因位置歧义导致解析失败
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











