×
微信咨询
微信二维码

长按图片识别添加或保存到相册

产品服务 帮助文档

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() → 返回类型用 ?array
  • select()->toArray() → 返回类型用 array
大纲

文章目录

    联系我们
    联系方式
    • 官方服务热线:17721141027
    • 邮箱:kf@ilaituan.com
    • QQ:20262336
    扫码添加客服
    微信
    联系我们