# eval

(PHP 4, PHP 5, PHP 7)

eval — 把字符串作为PHP代码执行

### 说明

eval ( string `$code` ) : mixed

把字符串 `code` 作为PHP代码执行。

Caution

函数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() 中的解析错误。

### 范例

Example #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.

### 注释

> Note: 因为是一个语言构造器而不是一个函数，不能被 可变函数 调用。

Tip

和直接将结果输出到浏览器一样，可使用输出控制函数来捕获当前函数的输出，然后(例如)保存到一个 string 中。

> Note:

> 如果在执行的代码中产生了一个致命的错误（fatal error），整个脚本会退出。

### 参见

- call_user_func() - 把第一个参数作为回调函数调用