代码之家  ›  专栏  ›  技术社区  ›  Guillermo Phillips

使用Eval函数时无法捕获异常

  •  0
  • Guillermo Phillips  · 技术社区  · 5 年前

    我正在编写代码,随机生成遗传算法的表达式,用于代码优化。生成的表达式是 eval

    我有以下代码(从原始代码简化):

    set_error_handler(function($errno, $errstr, $errfile, $errline, $errcontext) {
        throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    });
    
    $expression = '$y=~!7;';
    
    try {
        eval($expression);
    } catch (Exception $e){
        echo 'Expression failed';
    } catch (ParseError $e){
        echo 'Expression failed';
    }
    

    PHP Fatal error:  Unsupported operand types in ..... : eval()'d code on line ....
    

    但这个错误是错误的 catch

    我已经设置了自己的错误处理程序,以便将所有错误升级为异常。

    我如何捕捉这个错误?

    当前位置我非常清楚使用 评估 这是危险的,但也有危险 严格地

    0 回复  |  直到 5 年前
        1
  •  0
  •   udit rawat    5 年前

    @eval('$content = (100 - );');
    

    (即使是在男人身上,我敢肯定它在5.6中的表现是这样的,但不管怎样) 为了抓住它,我必须做:

    try {
        eval('$content = (100 - );');
    } catch (ParseError $e) {
        $content = null;
    }
    

    这是我发现的捕捉错误并隐藏存在错误的唯一方法。