laruence / php-lua

This extension embeds the lua interpreter and offers an OO-API to lua variables and functions.
http://pecl.php.net/package/lua
Other
149 stars 50 forks source link

对LuaException进行定义:lua代码和error方法抛出的异常才是LuaException #52

Open flysion opened 2 years ago

flysion commented 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 方法的参数,示例:

try {
    $lua->eval("error({code=1,message='test'})");
} catch(\LuaException $e) {
    var_dump($e->err);
}