use*_*690 6 php error-handling lambda
我有这个简单的PHP代码:
<?php
$code = "echo 'Hello World'; }";
call_user_func(create_function('', $code));
Run Code Online (Sandbox Code Playgroud)
如您所见,我的$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
Run Code Online (Sandbox Code Playgroud)
如何将Parse错误变为变量?例如:
$error = some_func_to_get_error();
echo $error;
// Parse error: syntax error, unexpected '}' in file.php(4) : runtime-created function on line 1
Run Code Online (Sandbox Code Playgroud)
我花了大约一周的时间研究这个问题,最后我发现了一些有趣的东西。如您所知,有一个名为的 build-it 函数error_get_last
返回有关最后一个错误的信息。在此代码中:
<?php
$code = "echo 'Hello World'; }";
call_user_func(create_function('', $code));
$error = error_get_last();
Run Code Online (Sandbox Code Playgroud)
它会返回类似这样的内容:
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
)
Run Code Online (Sandbox Code Playgroud)
最后执行时发生错误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();
Run Code Online (Sandbox Code Playgroud)
现在错误将是这样的:
Array
(
[type] => 4
[message] => syntax error, unexpected '}'
[file] => file.php(7) : runtime-created function
[line] => 1
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3854 次 |
| 最近记录: |