You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中是否存在同时使用??与?:运算符的优雅简写方式?

解决方案

1. 自定义辅助函数(最推荐,复用性强)

把「检查数组键存在且对应值为真」的逻辑封装成全局辅助函数,代码可读性和复用性都会大幅提升:

function array_has_truthy(array $array, int|string $key): bool
{
    return isset($array[$key]) && $array[$key];
}

使用示例:

// 基础判断场景
if (array_has_truthy($foo, 'id')) {
    // 执行编辑逻辑
}

// 字符串拼接场景
echo 'Resource foo ' . (array_has_truthy($foo, 'id') ? 'edit' : 'create');

优点:一次定义多处复用,语义清晰,后续逻辑调整只需修改函数内部。

2. 空合并运算符直接返回布尔值

将?? NULL替换为?? false,省去多余的隐式转换,代码更简洁:

// 基础判断场景
if ($foo['id'] ?? false) {
    // ...
}

// 字符串拼接场景
echo 'Resource foo ' . (($foo['id'] ?? false) ? 'edit' : 'create');

优点:无需额外定义函数,适合零散的简单判断场景。

3. 封装为数据对象(适合复杂业务场景)

如果业务中频繁处理这类数组数据,建议将数组封装成数据对象,通过类方法封装判断逻辑:

class ResourceData
{
    public function __construct(private array $data) {}

    /**
     * 检查是否存在有效ID
     */
    public function hasValidId(): bool
    {
        return isset($this->data['id']) && $this->data['id'];
    }

    // 可扩展其他常用方法
    public function getId(): mixed
    {
        return $this->data['id'] ?? null;
    }
}

使用示例:

$resource = new ResourceData($foo);

if ($resource->hasValidId()) {
    // ...
}

echo 'Resource foo ' . ($resource->hasValidId() ? 'edit' : 'create');

优点:面向对象语义更强,便于复杂业务逻辑的维护和扩展。


内容的提问来源于stack exchange,提问作者Schubi Duah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 13:01:39