php函数参数类型声明怎么用_php函数参数类型限定【语法】

10次阅读

php 函数参数类型声明必须写在参数名前,如 function foo(type $param);strict_types= 1 须为文件首行非空非注释语句;可空类型用?string 而非 string|null;void 仅作返回类型且禁止 return 值;联合类型中 null 须用? 语法。

php 函数参数类型声明怎么用_php 函数参数类型限定【语法】

PHP 函数参数类型声明必须写在参数名前面

PHP 7.0+ 支持在函数定义中直接声明参数类型,语法是 function foo(Type $param),不是 function foo($param: Type)(那是 TypeScript 风格,PHP 不认)。漏掉类型或位置写错,会直接报 ParseError

  • 标量类型(stringintfloatbool)默认开启严格模式才强制校验;否则 PHP 会尝试自动转换(比如把 "123" 转成 int
  • 类名、接口名、arraycallableiterableobject 这些类型,无论是否启用严格模式,只要传错就立刻抛 TypeError
  • 如果想允许 null,得显式写成 ?stringstring|null(PHP 8.0+ 推荐前者),光写 string 就不接受 null

strict_types=1 必须放在文件顶部第一行

启用严格类型检查不是靠函数里写类型就能生效的——它依赖 declare(strict_types=1);,而且这行必须是 PHP 文件中 ** 第一个非空白、非注释的语句 **。放第二行、被 BOM 或空格顶到前面,都会让声明失效,变成松散类型行为。

  • 这个声明只对当前文件有效,不会影响 includerequire 的其他文件
  • 没加这行时,int $x = "42" 会静默转成 42;加了之后,直接报 TypeError
  • 常见坑:用 IDE 自动生成文件头(比如版权注释)时,不小心把 declare 挤到了第二行,结果调试半天发现类型没生效

void 返回类型不能有 return 值,但可以 return;

void 表示函数不返回任何值,连 null 都不算合法返回。写成 function foo(): void { return null;} 会触发 Fatal error

  • 正确写法只有两种:return;(显式退出)或直接结束函数体(隐式返回)
  • void 不能作为参数类型,也不能出现在联合类型里(比如 void|string 是语法错误)
  • 注意和没有声明返回类型的函数区别:没声明时,函数可以返回任意值;声明了 void,就彻底禁止返回任何表达式

联合类型(PHP 8.0+)里 null 要用 ? 写法,别混用 | null

PHP 8.0 引入联合类型,比如 string|int,但 null 是个特例:必须用可空语法 ?string,不能写成 string|null(虽然解析器能认,但会触发 Deprecated 警告,PHP 9 会彻底禁用)。

立即学习 PHP 免费学习笔记(深入)”;

  • ?string 等价于 string|null,但前者是官方推荐写法,且更清晰表达“可空”语义
  • 联合类型中不能出现 voidmixed(PHP 8.0 中 mixed 是保留字,不能用于联合类型)
  • 如果函数可能返回多个类型又含 null,比如字符串或整数或空,得写成 string|int|null?不对——要写成 ?string|int?也不对。正确是 string|int 加上函数内允许返回 null 的逻辑,再配合 ?string|int 不合法;实际应选 string|int|NULL 并确保启用了 strict_types=1,但更稳妥是改用 mixed 或封装为返回数组

类型声明看着简单,真正落地时最常卡在 declare(strict_types=1) 的位置、可空语法的写法、以及联合类型中 null 的处理方式上。这几个点不手动验证一遍,很容易以为“写了类型就生效了”。

text=ZqhQzanResources