欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

关于eval()老是出错

程序员文章站 2024-02-09 18:47:22
...
php eval()
'400','name'=>'kuke','time'=>'1024')";$res="1+3";	var_dump($res);	$v=eval($res);	var_dump($v);	echo $v;	foreach($v as $key=>$val){		echo $key."=".$val;	}//-------------------------------------------echo "
";//--------------------------------------------$res=array('price'=>'400','name'=>'kuke','time'=>'1024'); var_dump($res); echo "
"; foreach($res as $key=>$val){ echo $key."=".$val."
"; }

这是结果
string(3) "1+3"
Parse error: syntax error, unexpected $end in D:\myweb\array.php(5) : eval()'d code on line 1
bool(false)
Warning: Invalid argument supplied for foreach() in D:\myweb\array.php on line 8

array(3) { ["price"]=> string(3) "400" ["name"]=> string(4) "kuke" ["time"]=> string(4) "1024" }
price=400
name=kuke
time=1024
有谁能帮我分析下,为什么出错吗?

回复讨论(解决方案)

$v = eval("return $res;");


eval() 返回 NULL ,除非在执行的代码中 return 了一个值,函数返回传递给 return 的值。 如果在执行的代码中有一个解析错误, eval() 返回 FALSE ,之后的代码将正常执行。无法使用 set_error_handler() 捕获 eval() 中的解析错误。

定义和用法

eval() 函数把字符串按照 PHP 代码来计算。

该字符串必须是合法的 PHP 代码,且必须以分号结尾。

如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
因此要这么写: $v=eval("return $res;");

Warning: Invalid argument supplied for foreach() in D:\myweb\array.php on line 8
这个错误是因为foreach只能遍历数组和对象,你传入$v 是bool值,所以就报错了。

1.
$res="1+3";
eval("\$v = \"$res\";");
var_dump($v);

2.
$v无数据