6

我有这个简单的 PHP 代码:

<?php

$code = "echo 'Hello World'; }";
call_user_func(create_function('', $code));

如您所见,我的$code有语法错误。当我运行它时,我得到了这个结果:

Parse error: syntax error, unexpected '}' in file.php(4) : runtime-created function on line 1
Warning: call_user_func() expects parameter 1 to be a valid callback, no array or string given in file.php on line 4

如何将Parse 错误转换为变量?例如:

$error = some_func_to_get_error();
echo $error;
// Parse error: syntax error, unexpected '}' in file.php(4) : runtime-created function on line 1
4

1 回答 1

3

我涉及这个问题大约一个星期,最后,我发现了一些有趣的东西。如您所知,有一个名为 build-it 的函数error_get_last ,它返回有关最后一个错误的信息。在这段代码中:

<?php

$code = "echo 'Hello World'; }";
call_user_func(create_function('', $code));
$error = error_get_last();

它将返回如下内容:

Array
(
    [type] => 2
    [message] => call_user_func() expects parameter 1 to be a valid callback, no array or string given
    [file] => file.php
    [line] => 4
)

执行时发生最后一个错误call_user_func。它需要一个回调,但是,它create_function不能正常工作(因为$code有解析错误)。

但是在设置自定义错误处理程序时return true;不会call_user_func抛出任何错误,最后一个错误将是运行时创建的函数中的错误。

<?php

// returning true inside the callback
set_error_handler(function () { return true; });

$code = "echo 'Hello World'; }";
call_user_func(create_function('', $code));
$error = error_get_last();

现在错误将是这样的:

Array
(
    [type] => 4
    [message] => syntax error, unexpected '}'
    [file] => file.php(7) : runtime-created function
    [line] => 1
)
于 2013-06-25T11:08:17.727 回答