php 7.0 标量类型声明是原生特性,需在文件首行(允许注释/bom)添加 declare(strict_types=1);,仅对当前文件生效;支持 int、float(=double)、string、bool 参数及返回值类型声明,开启后禁用自动类型转换,否则触发 typeerror。

PHP 7.0 的标量类型声明不需要额外“配置”扩展或修改 php.ini,它是一项原生语言特性,启用方式简单直接:在 PHP 文件顶部添加 declare(strict_types=1);,并在函数参数和/或返回值处写明类型即可。
必须写在文件开头的 strict_types 声明
该指令仅对当前文件生效,且必须是脚本中**第一条可执行语句**(允许前面有空白、注释或 BOM,但不能有输出或代码):
- ✅ 正确:
declare(strict_types=1);是第一行(或第二行,前面只有注释) - ❌ 错误:放在函数定义后、echo 之后、或被 require 引入的文件里(不作用于被引入文件)
- ⚠️ 注意:它不会影响其他文件,每个需要严格检查的文件都得单独声明
在函数中声明标量参数与返回值
支持四种标量类型:int、float、string、bool。语法直接写在参数名前或冒号后:
- 参数类型:如
function getPrice(int $id, string $currency): float - 返回值类型:紧跟函数签名后的
: type,如上例中的: float - 布尔值必须写
bool,不能写boolean(后者会报错) - float 可以写成 double,两者等价
区分严格模式与默认强制模式
不加 declare(strict_types=1); 时,PHP 使用强制模式(coercive mode),会尝试自动转换类型:
- 传
"123"给int $x→ 自动转为整数 123(不报错) - 传
42给string $s→ 自动转为字符串 "42" - 开启 strict_types 后,上述两种情况都会抛出
TypeError
常见陷阱与建议
实际使用中容易踩坑的地方:
- 数组键、对象属性、变量赋值不受标量声明约束——它只作用于函数/方法的参数传递和返回值
- 类型声明不支持 null(除非用联合类型 PHP 8.0+ 的
?int) - 第三方库若未启用 strict_types,调用其函数时不会触发你的严格检查(反之亦然)
- 建议在新项目中统一启用,并配合静态分析工具(如 PHPStan)进一步强化类型安全
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











