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