在PHP中是否可以不使用eval计算变量表达式?

在PHP中是否可以不使用eval计算变量表达式?,php,math,Php,Math,表达式用于计算Gettext的复数字符串的形式。例如: $expr='n==1?0:n%10>=2&&n%10即使可以构建一个能够解析有限数量的解析器(您只需要简单的数学运算符来计算复数),但就您花费在实现它和性能上的时间而言,这并不值得(显然,它会更慢) 因此,我个人会选择eval(),或者只需根据需要实现多元化的每种语言实现一个函数 这是我假设eval不是“邪恶”的情况之一,只要它的输入是由您预定义的我可以问一下,您为什么要不使用eval进行操作吗?恐怕这会很棘手。如果eval可能是出于安全

表达式用于计算Gettext的复数字符串的形式。例如:


$expr='n==1?0:n%10>=2&&n%10即使可以构建一个能够解析有限数量的解析器(您只需要简单的数学运算符来计算复数),但就您花费在实现它和性能上的时间而言,这并不值得(显然,它会更慢)

因此,我个人会选择
eval()
,或者只需根据需要实现多元化的每种语言实现一个函数


这是我假设
eval
不是“邪恶”的情况之一,只要它的输入是由您预定义的

我可以问一下,您为什么要不使用eval进行操作吗?恐怕这会很棘手。如果eval可能是出于安全原因,那么最简单的解决方案可能是创建一个脚本来解析输入的文本,然后在传递之前确保它是安全的。您不能将它留给Gettext库,就像在原始的
.po
文件中一样,这个复数形式在标题中给出吗?(我没有PHP实现的经验。)也许
.po
中的复数声明丢失了?谢谢,我不知道php有:)
$expr = str_replace('n','$n', $expr);

$n = 5;
$result = (int)eval("return $expr;");