PHP中?array和array的区别和用法
PHP7.1+可为null返回类型?array表示方法返回数组或null,适合find单条查询等可能找不到的场景,比直接返回array更准确表达不存在语义,避免TypeError。
public function findById(int $groupId, int $wxappId): ?array
{
$row = $this->videoGroup($wxappId)
->where('group_id', $groupId)
->find();
return $row ? $row->toArray() : null;
}
中的?array是什么意思?怎么使用?
这是 PHP 7.1+ 的「可为 null 返回类型」语法 ,叫 Nullable Return Type 。
一句话解释
?array
意思是: 这个方法要么返回 array,要么返回 null ,两种类型都合法。
对比就清楚了
| 写法 | 含义 |
|---|---|
: array |
必须返回数组,返回null会直接抛 TypeError |
: ?array |
可以返回数组,也可以返回null |
| 不加类型 | 想返回啥都行(无约束) |
放到你这个方法里看
public function findById(int $groupId, int $wxappId): ?array
{
$row = $this->videoGroup($wxappId)
->where('group_id', $groupId)
->find();
return $row ? $row->toArray() : null;
}
- 查到了 →
return $row->toArray()→ array ✅ - 没查到 →
return null→ null ✅
如果写成 : array 又 return null, PHP 会直接报错 :
TypeError: Return value must be of type array, null returned
为什么推荐写 ?array 而不是 array
在业务语义上,你这个方法是 「可能找不到」 的查询:
$group = $model->findById($id, $wxappId);
if (!$group) {
throw new Exception('分组不存在');
}
- 返回
?array→ 调用方一眼就知道要判空 - 返回
array→ 要么你返回空数组[](语义模糊),要么就报错
👉 null 表达「不存在」比 [] 更准确
什么时候该用 ?
| 场景 | 推荐 |
|---|---|
| 单条查询(find) | ?array✅ |
| 列表查询(select) | array✅(查不到返回[]就行) |
| 统计 count | int✅ |
| 新增返回 ID | int或?int(失败可能 false) |
一个常见小坑(ThinkPHP)
find(); // 查不到返回 null
select(); // 查不到返回空 Collection(转 toArray() 是 [])
所以:
find()→ 返回类型用?arrayselect()->toArray()→ 返回类型用array
来团QQ客服