参考:https://www.phpmianshi.com/?id=197
提前return
优化逻辑结构,让正常流程走主干,非正常流程提前return,去除不必要的else
优化前
$a = 1; $b = 2; $c = 3; if ($a == 1) { if ($b == 2) { if ($c == 3) { return true; } } } return false;
优化后
$a = 1; $b = 2; $c = 3; if ($a != 1) { return false; } if ($b != 2) { return false; } if ($c != 3) { return false; } return true;
使用条件三目运算符
优化前
$a = 1; if ($a == 1) { return true; } else { return false; }
优化后
$a = 1; return $a == 1 ? true : false;
使用枚举(表驱动法)
php8新增了match表达式,有兴趣的看鸟哥的介绍:https://www.laruence.com/2020/07/13/6033.html
优化前
$a = 1; if ($a == 0) { return '未支付'; } elseif ($a == 1) { return '已支付'; } else { return '支付失败'; }
优化后
$a = 1; $enum = [ 0 => '未支付', 1 => '已支付', 2 => '支付失败', ]; return $enum[$a];
如果是调用不同的函数可以考虑call_user_func实现
class Product { static function price() { echo 1; } } $classname = "Product"; call_user_func(array($classname, 'price')); call_user_func($classname . '::price'); // As of 5.2.3 $myobject = new Product(); call_user_func(array($myobject, 'price'));
合并条件表达式
优化前
$a = 1; if ($a == 0) { return '未支付'; } elseif ($a == 1) { return '已支付'; } elseif ($a == 2) { return '已支付'; } else { return '支付失败'; }
优化后
$a = 1; if ($a == 0) { return '未支付'; } elseif (in_array($a, [1, 2])) { //合并多个表达式 return '已支付'; } else { return '支付失败'; }
策略模式+工厂方法消除if-else
<?php /** * 策略模式 * 使用场景 * 假设现在要设计一个购物车系统,一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这个复杂。 * 例如:对普通会员无折扣,对中级会员提供8折优惠,对高级会员提供7折优惠。 * 场景2: * 例如:一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示不同的广告 */ interface Strategy { public function calPrice($price); } /** * 普通会员策略类 */ class PrimaryStrategy implements Strategy { public function calPrice($price) { echo "普通会员无折扣"; return $price; } } /** * 中级会员策略类 */ class MiddleStrategy implements Strategy { public function calPrice($price) { echo "中级会员8折优惠"; return $price * 0.8; } } /** * 高级会员策略类 */ class HighStrategy implements Strategy { public function calPrice($price) { echo "高级会员7折优惠"; return $price * 0.7; } } /** * 价格实现类 */ class Price { /** * 具体的策略类对象 */ private $strategyInstance; /** * 构造函数,传入一个具体的策略对象 * * @param object $instance */ public function __construct($instance) { $this->strategyInstance = $instance; } /** * 计算货品的价格 * * @param double $price */ public function quote($price) { return $this->strategyInstance->calPrice($price); } } /** * 客户端操作 */ $high = new HighStrategy(); $priceClass = new Price($high); $price = $priceClass->quote(400); echo $price;