php-lua
php-lua copied to clipboard
对LuaException进行定义:lua代码和error方法抛出的异常才是LuaException
当前的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 方法的参数,示例:
try {
$lua->eval("error({code=1,message='test'})");
} catch(\LuaException $e) {
var_dump($e->err);
}