您的位置 首页 php

PHP捕获eval当中的语法错误和系统错误的方法

1. 介绍

1.1 介绍

福哥在使用PHP开发一个允许用户输入伪代码实现自定义业务逻辑的功能时候,想到了使用PHP的eval功能动态解析PHP代码并且执行来实现。

不过,福哥发现了一个问题。大家都知道PHP的语法错误是在解析PHP代码的环节就会触发的严重错误,这个错误无法通过set_error_handler钩住它进行自定义处理,这个可能难坏了我了!毕竟,用户输入的伪代码可保不齐会有低级的语法错误啊~~

2. 解决

经过一番研究后发现,原来eval可以通过try .. catch来捕获它的错误。

2.1 全部错误

需要注意的是eval必须用Error异常才可以捕获错误,包括语法错误或者执行错误都可以捕获到。

2.2 语法错误和执行错误

如果需要单独判断语法错误的话,可以换成ParseError异常。然后下面再补一个Error异常捕获执行错误。

2.3 完整示例

下面福哥给一个完整的示例代码。

2.3.1 语法错误

 try{
    // 福哥写了一个没有关闭括号的函数调用,这里属于语法错误了
    eval('call_tongfu_net(');
}
catch (ParseError $e){
    print("语法错误: ". $e->getMessage());
}
catch (Error $e){
    print("执行错误: ". $e->getMessage());
}  

2.3.2 执行错误

 try{
    // 福哥写了一个不存在的函数调用,肯定会报执行错误的
    eval('call_tongfu_net();');
}
catch (ParseError $e){
    print("语法错误: ". $e->getMessage());
}
catch (Error $e){
    print("执行错误: ". $e->getMessage());
}  

文章来源:智云一二三科技

文章标题:PHP捕获eval当中的语法错误和系统错误的方法

文章地址:https://www.zhihuclub.com/150255.shtml

关于作者: 智云科技

热门文章

网站地图