php 7.4函数参数int类型声明在定义时生效,strict_types=1禁用自动转换,null/数组非法,可空类型需显式声明?int,类型检查仅限入参不跟踪内部变量赋值。

函数定义时声明 int 类型参数即可
PHP 7.4 支持标量类型声明,只要在函数参数前写 int,调用时传入的值就会被强制校验。不是“调用时加什么语法”,而是定义时就锁定类型——调用方只需传一个能转成整数的值(严格模式下必须是整数)。
declare(strict_types=1) 决定是否允许自动转换
不加这行,"123"、true、12.9 都会被静默转成 123、1、12;加了它,传字符串或浮点数直接抛 TypeError。
- 宽松模式(默认):
declare(strict_types=0); function foo(int $x) { return $x; } foo("42"); // ✅ 返回 42 - 严格模式:
declare(strict_types=1); foo("42"); // ❌ Fatal error: Uncaught TypeError
传 null 或空数组会报错,不是转成 0
int 类型参数不允许 null,哪怕你没设默认值。传 null、[]、"" 都触发 TypeError,不会像旧版那样回退成 0。
- 合法:
foo(0)、foo(-5)、foo(42) - 非法:
foo(null)、foo($undefined)、foo([]) - 想接受空值?得用可空类型:
function bar(?int $x) { ... }
注意:类型声明只管传入值,不管内部变量
int $x 只约束调用时传进来的那个值,函数体内对 $x 的重新赋值(比如 $x = "abc";)不会报错,也不会触发类型检查——PHP 不做运行时变量类型跟踪。
真正容易被忽略的是:类型声明和引用传递互不影响。你可以写 function baz(int &$x),但 &$x 要求传变量,int 要求值是整数,两者约束并存,缺一不可。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











