该表达式用于计算Gettext的复数形式。例如:
$expr = 'n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2';
与eval我正在做类似的事情:
$expr = str_replace('n','$n', $expr);
$n = 5;
$result = (int)eval("return $expr;");
这可以在没有eval的情况下完成吗?
答案 0 :(得分:3)
即使有可能构建一个能够解析有限数量的解析器(你只需要琐碎的数学运算符来计算复数),但就你花在实现它和性能上的时间而言,它是不值得的(显然它会慢一点。
因此,我个人会使用eval()
,或者只是为每种语言实现一个多元化的函数。
只要其输入是由您预定义的,我认为eval
不是“邪恶”的情况之一