Php可重用代码,具有较少的行或功能,使其可重用代码

时间:2014-10-17 05:36:21

标签: php function

想要使用较少的行重新使用以下代码,而不是重复它.Ex将代码放在某个函数等中。因此代码看起来很干净并且优化。

 if($pos_Year) {
        preg_match('/^([=<>!]+)([0-9]+)$/', $pos_Year, $tokens);
        $operator = $tokens[1];
        $operand  = $tokens[2];
        $ck_year = create_function('$value', '
        $operand = '.$operand.';
        switch("'.$operator.'") {
            case "==": return ($value==$operand);
            case "!=": return ($value!=$operand);
            case "<":  return ($value<$operand);
            case "<=": return ($value==$operand);
            case ">":  return ($value>$operand);
            case ">=": return ($value>=$operand);
            default:   throw new Exception("invalid operator");
        }');
    }

    if($pos_Month) {
        preg_match('/^([=<>!]+)([0-9]+)$/', $pos_Month, $tokens);
        $operator = $tokens[1];
        $operand  = $tokens[2];
        $ck_month = create_function('$value', '
        $operand = '.$operand.';
        switch("'.$operator.'") {
            case "==": return ($value==$operand);
            case "!=": return ($value!=$operand);
            case "<":  return ($value<$operand);
            case "<=": return ($value==$operand);
            case ">":  return ($value>$operand);
            case ">=": return ($value>=$operand);
            default:   throw new Exception("invalid operator");
        }');
    }
$ck_year(2014);
$ck_month(6);

1 个答案:

答案 0 :(得分:0)

&#34;规则&#34;删除重复或几乎重复的代码很简单: 1)找到类似的代码,差异很小或没有差异 2)将代码封装为函数或方法 3)用传递给函数/方法的参数替换差异或潜在差异。

我缺乏背景,特别是对于&#34; $ value&#34;和#34; $令牌&#34;变量,但在你的情况下,代码非常相似,只有一个参数(如果2个提到的变量也改变,可能是2或3)。你甚至不需要&#34; if&#34;函数中的条件 - 它应该在外面(如果有的话):

function check_value($theValue)
{
    preg_match('/^([=<>!]+)([0-9]+)$/', $theValue, $tokens);
    $operator = $tokens[1];
    $operand  = $tokens[2];
    $ck_month = create_function('$value', '
    $operand = '.$operand.';
    switch("'.$operator.'") {
        case "==": return ($value==$operand);
        case "!=": return ($value!=$operand);
        case "<":  return ($value<$operand);
        case "<=": return ($value==$operand);
        case ">":  return ($value>$operand);
        case ">=": return ($value>=$operand);
        default:   throw new Exception("invalid operator");
    }');
}

$ck_value(2014);
$ck_value(6);