Open flysion opened 2 years ago
当前的lua扩展有一个很大的问题:把一个PHP方法registerCallback给lua之后,如果lua调用这个方法出现php的异常,lua的代码还是会继续往下走,示例:
$lua->registerCallback("test", function() { throw new \Exception("test"); }); $lua->eval(<<<LUA test() -- php 抛出了异常 print("Hello php.") -- 代码继续走到了这里 LUA );
以上是题外话,但是和这个改进相关。当lua侧代码出现了问题需要终止的时候,只有一种终止方法,那就是error方法。php侧需要捕获这个异常做一些特殊处理的时候只需要判断 $e instanceof \LuaException。其次 php 需要得到 error 方法的参数,示例:
$e instanceof \LuaException
try { $lua->eval("error({code=1,message='test'})"); } catch(\LuaException $e) { var_dump($e->err); }
当前的lua扩展有一个很大的问题:把一个PHP方法registerCallback给lua之后,如果lua调用这个方法出现php的异常,lua的代码还是会继续往下走,示例:
以上是题外话,但是和这个改进相关。当lua侧代码出现了问题需要终止的时候,只有一种终止方法,那就是error方法。php侧需要捕获这个异常做一些特殊处理的时候只需要判断
$e instanceof \LuaException
。其次 php 需要得到 error 方法的参数,示例: