Home >Backend Development >PHP Tutorial >关于eval()老是出错

关于eval()老是出错

WBOY
WBOYOriginal
2016-06-23 14:28:162652browse

php eval()

<?php//	$res="array('price'=>'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 "<br/>";//--------------------------------------------$res=array('price'=>'400','name'=>'kuke','time'=>'1024');	var_dump($res);	echo "<br/>";	foreach($res as $key=>$val){		echo $key."=".$val."<br>";	}

这是结果
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无数据

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn