提前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;
标签:function,return,price,优雅,else,支付,php,public From: https://blog.51cto.com/u_6353447/5886802