# 原代码
if (isset($value['r']) ) { // 对比属性值
    if(isset($array[$key]) && $array[$key]==$value['r']){
        $module  = str_replace('[if['.$value['v'].']if]',str_replace('::'.$key.'='.$value['r'].'::','',$value['v']), $module);
    }else{
        $module  = str_replace('[if['.$value['v'].']if]', '', $module);
    }
}else if(isset($value['i'])){// 是否含有属性
    if(isset($array[$key]) && strstr($value['i'],(string)$array[$key])){
        $module  = str_replace('[if['.$value['v'].']if]',str_replace('::'.$key.'^'.$value['i'].'::','',$value['v']), $module);
    }else{
        $module  = str_replace('[if['.$value['v'].']if]', '', $module);
    }
}else if(isset($value['sub'])){ // 是否含有子属性
    if( isset($array[$value['c'][0]][$value['c'][1]])){
        $module  = str_replace('[if['.$value['v'].']if]',str_replace('::'.$key.'::','',$value['v']), $module);
    }else{
        $module  = str_replace('[if['.$value['v'].']if]', '', $module);
    }
}else{
    if (isset($array[$key])) {
        $module  = str_replace('[if['.$value['v'].']if]',str_replace('::'.$key.'::','',$value['v']), $module);
    }else{
        $module  = str_replace('[if['.$value['v'].']if]', '', $module);
    }
}

# 优化后

$origin = '[if['.$value['v'].']if]';
$condit = isset($value['g']) && isset($value['r'])  ? '::'.$key.$value['g'].$value['r'].'::' : '::'.$key.'::' ;
$replacement = str_replace($condit,'',$value['v']);

if ( 
    !isset($value['g']) && !isset($array[$key]) ||
    # 不存在值且不存在对比

    in_array($value['g'], ['>','<','>=','<=','=']) && !(isset($array[$key]) && MIXER::compareValue($array[$key],$value['g'],$value['r'])) ||
    # 对比属性值

    $value['g']=='^' && !(isset($array[$key]) && strstr($value['i'],(string)$array[$key]) ) ||
    # 是否含有属性

    $value['g']=='.' && !(isset($array[$value['c'][0]][$value['c'][1]])) 
    # 是否含有子属性
) {

    $replacement = '';
}

$module  = str_replace($origin, $replacement, $module);

IF ELSE, ||, && 同属于短路逻辑 在效率上差不多,不需要遍历全部结果,而是有一个优先级的递进式判断。 用||来代替if 逻辑上并没有什么差别。只是在代码简洁上做一些优化。

使用三个变量来描述了一些过程中的临时变量,能够更好的理解这些变量在上下文中的含义,结构上也避免了重复的排布,让代码逻辑更加明确,但是理解成本略微增高,不像原版本中完全是平铺直叙的过程描述。

标签: php, 代码优化, 短路逻辑

添加新评论