(PHP 4, PHP 5, PHP 7, PHP 8)
eval — 把字符串作为PHP代码执行
把字符串 code
作为PHP代码执行。
函数eval()语言结构是 非常危险的, 因为它允许执行任意 PHP 代码。 它这样用是很危险的。 如果您仔细的确认过,除了使用此结构以外 别无方法, 请多加注意,不要允许传入任何由用户 提供的、未经完整验证过的数据 。
code
需要被执行的字符串
代码不能包含打开/关闭
PHP tags。比如,
'echo "Hi!";'
不能这样传入:
'<?php echo "Hi!"; ?>'
。但仍然可以用合适的 PHP tag 来离开、重新进入 PHP 模式。比如
'echo "In PHP mode!"; ?>In HTML mode!<?php echo "Back in PHP mode!";'
。
除此之外,传入的必须是有效的 PHP 代码。所有的语句必须以分号结尾。比如
'echo "Hi!"'
会导致一个 parse error,而
'echo "Hi!";'
则会正常运行。
return
语句会立即中止当前字符串的执行。
代码执行的作用域是调用 eval() 处的作用域。因此,eval() 里任何的变量定义、修改,都会在函数结束后被保留。
eval() 返回 null
,除非在执行的代码中 return
了一个值,函数返回传递给 return
的值。 PHP 7 开始,执行的代码里如果有一个 parse error,eval() 会抛出 ParseError 异常。在 PHP 7 之前,
如果在执行的代码中有 parse error,eval() 返回
false
,之后的代码将正常执行。无法使用 set_error_handler() 捕获 eval() 中的解析错误。
示例 #1 eval() 例子 - 简单的文本合并
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
?>
以上例程会输出:
This is a $string with my $name in it. This is a cup with my coffee in it.