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
相关产品推荐
相关产品推荐

