2 回答
TA贡献1829条经验 获得超7个赞
您的代码无法按预期工作,因为在 PHP 中,未定义的变量不会触发解析错误,而是会触发通知。感谢set_error_handler本机函数,您可以将通知转换为错误,然后使用以下 PHP 7 代码捕获它:
<?php
set_error_handler(function($_errno, $errstr) {
// Convert notice, warning, etc. to error.
throw new Error($errstr);
});
$one = "hello";
$two = " world";
$three = '';
$cmdstr = '$three = $one . $tw;';
try {
$result = eval($cmdstr);
} catch (Throwable $e) {
echo $e; // Error: Undefined variable: tw...
}
echo $three;
TA贡献2039条经验 获得超7个赞
您的 PHP 代码会抛出“Notice”类型的错误,并且这些错误无法由 try..catch 块处理。您必须使用 PHP 的set_error_handler方法来使用自己的错误处理程序。阅读该文档,您就会明白该怎么做。如果您想要一个如何操作的示例,那么:
<?php
function myErrorHandler($errno, $errstr)
{
switch ($errno) {
case E_USER_ERROR:
die("User Error");
break;
default:
die("Your own error");
break;
}
/* Don't execute PHP internal error handler */
return true;
}
$err = set_error_handler("myErrorhandler");
$one = "hello";
$two = " world";
$three = '';
$cmdstr = '$three = $one . $tw;';
$result = eval($cmdstr);
echo $three;
?>
- 2 回答
- 0 关注
- 133 浏览
添加回答
举报