在PHP中,我可能想要评估一个字符串,它可能会调用我的一个用户定义的方法。
我有一些类似的东西:
function convertToBytes($value)
{
$number=substr($value,0,-1);
switch(strtoupper(substr($value,-1))){
case "K":
return $number*1024;
case "M":
return $number*pow(1024,2);
case "G":
return $number*pow(1024,3);
case "T":
return $number*pow(1024,4);
case "P":
return $number*pow(1024,5);
default:
return $value;
}
}
$expression = 'if (convertToBytes("1024K") >= 102400)
return true;
else
return false;';
$value = eval($expression);
我想知道我是否可以在不使用eval的情况下做到这一点。
我很困惑。当你可以很容易地将$value
设置为真正的布尔值时,你不应该使用eval()
来做这样的事情,比如:
$value = (convertToBytes("1024K") >= 102400);
您最好将其拆分。所以它实际上是这样的:
function convertToBytes($value, $type) {
...
}
那么你可以做:
$value = (convertToBytes(1024, 'K') >= 102400);
你的函数看起来像:
function convertToBytes($value, $type = "K")
{
switch($type){
case "K":
return $value*1024;
case "M":
return $value*pow(1024,2);
case "G":
return $value*pow(1024,3);
case "T":
return $value*pow(1024,4);
case "P":
return $value*pow(1024,5);
default:
return $value;
}
}