3

比較演算子を含む一連のルールがあります。ルールに格納されている比較演算子の値に基づいて何らかのタスクを実行したいと考えています。以下の方法でやっていますが、うまくいきません。次のコードを確認してください

if($benRules[$i]['amountCriteria']=='Greater than')
    $comparison='>';
if($benRules[$i]['amountCriteria']=='Equal to')
    $comparison='==';
if($benRules[$i]['amountCriteria']=='Less than')
    $comparison='<';

if($value['1'].$comparison.$value[$i]['2']){
    debug('Condtion checked');
}

問題は、条件が真であることを常にチェックすることです。IF 条件内のパラメーター全体が文字列である必要があるため、その文字列が空でない限り、括弧内のコードが実行されます。ここで私を助けてください。

4

6 に答える 6

1

この種の構成は、create_function()またはeval().

ただし、クロージャーを使用して目的を達成することもできます。使用する演算子に基づいて比較関数を返します。これは、戦略パターンの安価なバージョンと見なすことができます。

function getComparisonFunction($operator)
{
    // comparison function is returned
    return function($a, $b) use ($operator) {
        if ($operator == 'Greater than') {
            return $a > $b;
        } elseif ($operator == 'Equal to') {
            return $a == $b;
        } else { // Less than
            return $a < $b;
        }
    }
}
// get comparison function
$fn = getComparisonFunction($benRules[$i]['amountCriteria']);

// use comparison function
if ($fn($value['1'], $value[$i]['2'])) {
    debug('Condtion checked');
}
于 2013-08-12T07:12:21.593 に答える