PHP Değişken Operatörleri

5 Cevap php

Bu örnek göz önüne alındığında, nasıl bir dize olarak denklemin ziyade denklemin kendisi sonucu dönecekti?

$operator = '+';
foreach($resultSet as $item){
    $result = $item[$this->orderField] . $operator . 1;
    echo $result;
}

5 Cevap

Tam olarak elde etmek için, create_function kullanabilirsiniz

$operator = '+';
$func = create_function('$a,$b', "return \$a $operator \$b;");
foreach($resultSet as $item){
    $result = $func($item, 1);
    echo $result;
}

Bir temizleyici solüsyonu (PHP5.3 gerekli) lambdas ile mümkündür

$func = function($a, $b) { return $a + $b; };
foreach($resultSet as $item){
    $result = $func($item, 1);
    echo $result;
}

Array_reduce, array_sum Ayrıca bakınız

Array_reduce ve lambdas ile gelişmiş örneğidir

$ary = array(
    array('foo' => 1, 'bar' => 91),
    array('foo' => 2, 'bar' => 92),
    array('foo' => 3, 'bar' => 93),
    array('foo' => 4, 'bar' => 94),
    array('foo' => 5, 'bar' => 95),
);

$sumOfFoos = array_reduce($ary, 
    function($val, $item) { return $val + $item['foo']; } 
);
$sumOfBars = array_reduce($ary, 
    function($val, $item) { return $val + $item['bar']; } 
);

Ana nokta (php mümkün değildir) yerine 'değişken operatörler' arasında olduğu, yerine (mümkün olduğu ve daha esnek) değişken işlevleri kullanmanız gerekir.

Hızlı Cevap) (eval olduğunu. Ancak bu kesin örnekte ben sadece sabit kod olası operasyon olur:

<?php

$operator = '+';
foreach($resultSet as $item){
    switch($operator){
        case '+':
            $result = $item[$this->orderField] + 1;
            break;
    }
    echo $result;
}

?>

http://php.net/manual/en/function.eval.php: PHP eval işlevini kullanın

$operator = '+';
foreach($resultSet as $item){
    $result = $item[$this->orderField] . $operator . 1;
    eval("\$result = \"$result\";");
    echo $result;
}