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;
}
Sen operatörleri sarın işlevleri yapmak, ya da sadelik için sadece bc a> uzantısı kullanabilirsiniz:
$operator = '+';
$operators = array(
'+' => 'bcadd',
'-' => 'bcsub',
'*' => 'bcmul',
'/' => 'bcdiv'
);
foreach($resultSet as $item){
$result = call_user_func($operators[$operator], $item[$this->orderField], 1);
echo $result;
}
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.
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;
}