下面的代码部分取自一个函数:
$dynamic_comparison = '';
if(($from == '')&&($to == '')){
$dynamic_comparison = 1;
}else if(($from != '')&&($to != '')){
$dynamic_comparison = '($row >= $from) && ($row <= $to)';
}else if(($from != '')&&($to == '')){
$dynamic_comparison = '($row >= $from)';
}else if(($from == '')&&($to != '')){
$dynamic_comparison = '($row <= $to)';
}
$form
、$to
、$row
为函数参数。
我想把$dynamic_comparison
计算成这样:
if($dynamic_comparison){
//A bunch of code here...
}
我试着:
if(eval($dynamic_comparison)){
//A bunch of code here...
}
抛出错误。如何做到这一点呢?
eval()是个坏主意。你可以使用匿名函数,像这样
$dynamic_comparison = function($row, $to, $from) { return false };
if(($from == '')&&($to == '')){
$dynamic_comparison = function($row, $to, $from) { return true;};
}else if(($from != '')&&($to != '')){
$dynamic_comparison = function($row, $to, $from) { return ($row >= $from) && ($row <= $to);};
}else if(($from != '')&&($to == '')){
$dynamic_comparison = function($row, $to, $from) { return ($row >= $from);};
}else if(($from == '')&&($to != '')){
$dynamic_comparison = function($row, $to, $from) { return ($row <= $to);};
}
像
一样使用if($dynamic_comparison($row, $to, $from))...
如果你想使用eval:
$dynamic_comparison = 'return false;';
if(($from == '')&&($to == '')){
$dynamic_comparison = 'return true;';
}else if(($from != '')&&($to != '')){
$dynamic_comparison = 'return ($row >= $from) && ($row <= $to);';
}else if(($from != '')&&($to == '')){
$dynamic_comparison = 'return ($row >= $from);';
}else if(($from == '')&&($to != '')){
$dynamic_comparison = 'return ($row <= $to);';
}
if(eval($dynamic_comparison)){//$to,$from,$row must be available in this scope
我认为你必须使用双引号而不是单引号为你的字符串,像这样:
<?php
$dynamic_comparison = '';
if(($from == '')&&($to == '')){
$dynamic_comparison = 1;
}else if(($from != '')&&($to != '')){
$dynamic_comparison = "($row >= $from) && ($row <= $to)";
}else if(($from != '')&&($to == '')){
$dynamic_comparison = "($row >= $from)";
}else if(($from == '')&&($to != '')){
$dynamic_comparison = "($row <= $to)";
}
如果此时没有初始化$row,转义$ character:
<?php
$dynamic_comparison = '';
if(($from == '')&&($to == '')){
$dynamic_comparison = 1;
}else if(($from != '')&&($to != '')){
$dynamic_comparison = "('$row >= $from) && ('$row <= $to)";
}else if(($from != '')&&($to == '')){
$dynamic_comparison = "('$row >= $from)";
}else if(($from == '')&&($to != '')){
$dynamic_comparison = "('$row <= $to)";
}
参见eval()文档:http://php.net/manual/en/function.eval.php