php 7.0 不支持混合类型参数语法,仅允许单一类型声明;空数组[]在array类型参数中完全合法,符合严格模式要求;需多态输入时应升级至php 7.1+或8.0+。

PHP 7.0 在 declare(strict_types=1) 下不支持混合类型参数语法(如 array|int 或 array|null),因此“空数组在混合类型参数中的表现”这一说法本身存在前提偏差——PHP 7.0 根本无法声明混合类型参数,更不存在对空数组的特殊处理逻辑。
PHP 7.0 不具备混合类型能力
PHP 7.0 仅支持单一类型声明(int、string、array 等)和可为空类型(?array)的雏形语法,但:
-
?array是 PHP 7.1 引入的,PHP 7.0 解析会报语法错误 -
array|int、array|null等联合类型在 PHP 8.0 才正式支持 - PHP 7.0 中所有函数参数只能声明一个具体类型,不能用
|或&组合
空数组在 PHP 7.0 单一类型参数中是合法值
当参数声明为 array 时,空数组 [] 完全符合要求,属于有效输入:
-
function process(array $items) { ... }→process([])正常执行 - 因为
[]是真实数组(is_array([]) === true),满足严格模式对array的字面匹配要求 - 它与
null、false、0、''等完全无关,后者传入均触发TypeError
想模拟“数组或其它类型”的兼容方案
若业务逻辑确实需要接受空数组、字符串、整数等不同输入,PHP 7.0 只能绕过类型系统,靠运行时判断:
- 移除类型声明,改用
mixed语义(无原生mixed类型,仅靠注释说明):
/** @param array|string|int $input */ function handle($input) { ... } - 在函数内手动区分:
if (is_array($input)) { ... } elseif (is_string($input)) { ... } - 避免使用强制转换(如
(array)$input)掩盖类型契约,这违背严格模式的设计初衷
升级是最直接的解决路径
若项目已依赖严格类型且需表达多态输入,应考虑升级至更高版本:
- PHP 7.1+:支持
?array(数组或 null) - PHP 8.0+:支持
array|string|int等完整联合类型 - PHP 8.2+:支持属性类型声明 + 联合类型,可安全定义
public array|string|null $data;
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











