PHP布尔场景优化条件代码:如何省略else语句实现简洁写法
优化方案
当然可以简化这段代码,核心思路是提取重复逻辑,利用布尔值直接复用判断结果:
基础优化版(无需修改原有类)
$isApproved = $command->approve(); $schedule->setApproval($isApproved); $schedule->setApprovalAt($isApproved ? new \DateTime() : null);
优势:
- 完全省略了
else子句,代码结构更扁平 - 避免重复调用
setApproval,把布尔判断结果存入变量后直接复用 - 逻辑清晰,一眼就能看出两个setter的依赖关系
如果你的PHP版本在7.0以上,且确认$command->approve()方法无副作用(每次调用返回值一致),也可以省略中间变量,直接内联调用:
$schedule->setApproval($command->approve()); $schedule->setApprovalAt($command->approve() ? new \DateTime() : null);
面向对象封装版(推荐,需修改Schedule类)
如果有权限修改Schedule类的代码,可以封装一个统一的方法来处理审批状态设置,进一步简化调用逻辑:
// 在Schedule类中新增方法 public function setApprovalStatus(bool $approved): void { $this->setApproval($approved); $this->setApprovalAt($approved ? new \DateTime() : null); }
之后调用时只需要一行代码:
$schedule->setApprovalStatus($command->approve());
优势:
- 把审批状态的关联逻辑封装在Schedule类内部,符合单一职责原则
- 外部调用代码极度简洁,后续修改审批逻辑时只需修改类内部方法,无需改动所有调用处
内容的提问来源于stack exchange,提问作者Filip Stojavonic
相关产品推荐
相关产品推荐

