如何在PHP中运行时创建的函数中访问解析错误?

时间:2013-06-25 05:54:40

标签: php error-handling lambda

我有这个简单的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

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

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

1 个答案:

答案 0 :(得分:3)

我对这个问题进行了大约一周的讨论,最后,我找到了一些有趣的东西。 如您所知,有一个名为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
)