eval("echo {$row11['incentive']};");
在名为incentive的表列中,我将值存储为字符串,例如。 '($workshop_sales*0.005)'
存储多种公式以计算激励。
我在php中使用上面的代码生成了结果,但是当我要将其值存储在任何变量中时,它都没有被存储。
如何存储结果?是否有可能?
答案 0 :(得分:0)
假设:
$workshop_sales = 15;
$row11['incentive'] = '($workshop_sales*0.005)';
变体1 直接保存结果(不安全):
$foo = eval("return {$row11['incentive']};");
echo $foo; //Outputs 0.075
变体2 之前替换变量(应为pretty secure)
function do_maths($expression) {
eval('$o = ' . preg_replace('/[^0-9\+\-\*\/\(\)\.]/', '', $expression) . ';');
return $o;
}
//Replace Variable with value before
$pure = str_replace("\$workshop_sales", $workshop_sales, $row11['incentive']);
//$pure is now (15*0.005)
//Interpret $pure
$foo = do_maths($pure);
echo $foo; // Outputs 0.075
但请注意eval()
,邪恶。
eval()的主要问题是:
潜在的不安全输入。传递不受信任的参数是一种失败的方法。确保参数(或其中的一部分)完全受信任通常不是一项微不足道的任务。
<强> Trickiness 即可。使用eval()可以使代码更聪明,因此更难以遵循。引用Brian Kernighan“调试的速度是编写代码的两倍。因此,如果您尽可能巧妙地编写代码,那么根据定义,您可能不够聪明,无法对其进行调试”
答案 1 :(得分:0)
代替回显 eval-ed 代码,返回值:
<?php
$workshop_sales = rand(1000, 9999);
$row11['incentive'] = '($workshop_sales*0.005)';
$result = eval("return {$row11['incentive']};");
var_dump($result);
来自docs:
eval()返回NULL,除非在计算代码中调用return,...
明显的 eval是危险的 - 陈述(也来自文档):
警告 eval()语言结构非常危险,因为它 允许执行任意PHP代码。因此不鼓励使用它。 如果您已经仔细确认除了以外没有其他选择 使用此构造,请特别注意不要传递任何用户 提供数据而未事先正确验证。
答案 2 :(得分:0)
只需将变量分配给eval
函数
稍后使用您的变量
例如:
eval('$result = "2";');
echo $result;
这将打印出$result
变量
PS, 你必须看看@yoshi提到的使用eval的危险性