- 本文地址: https://www.laruence.com/2011/06/19/2047.html
- 转载请注明出处
上周的时候, 搞mysql proxy, 发现要用lua写服务器脚本, 加之以前配置lighttpd的时候, 配置也可以用lua来写, 就想彻底学习和研究下lua.
本着学习Lua的态度, 写了一个PHP扩展Plua, 把Lua解析器嵌入了PHP.
Lua的堆栈式传参, 很值得借鉴, 这点上, 感觉比PHP用一个结构体表示弱类型, 要来的更严格, 更可靠一些.
目前可以想到的应用场景, 是可以实现一种编写(Lua), 多处调用(C, PHP, Java等).
不废话了, 项目主页: Plua
代码在Google code上:http://code.google.com/p/plua/
<?php $lua = new Plua($lua_script_file = NULL); $lua->eval("lua_statements"); //eval lua codes $lua->include("lua_script_file"); //import a lua script $lua->assign("name", $value); //assign a php variable to Lua $lua->register("name", $function); //register a PHP function to Lua with "name" $lua->call($string_lua_function_name, array() /*args*/); $lua->call($resouce_lua_anonymous_function, array() /*args); $lua->call(array("table", "method"), array(...., "push_self" => [true | false]) /*args*/); $lua->{$lua_function}(array()/*args*/); ?>
后记: Plua项目现在已经取代了原来的Lua成为了PECL的Lua扩展, Plua也改名为了Lua, 所以请使用最新的Lua
我发现了当使用了registerCallback注册一个变量给PHP之后,导致内存不被释放的问题(MyLua 和 Lua 都不会释放):
“`PHP
class MyLua {
protected $lua;
public function __construct()
{
$this->lua = new \Lua();
$this->lua->registerCallback(‘import’, function() { return $this->xxx(…func_get_args()); });
}
protected function xxx()
{
return “hello”;
}
};
}
function foo() {
new MyLua();
}
for($i = 0; $i foo();
echo ” ” . memory_get_usage() / 1024 . “\n”;
}
“`
请问有什么办法
目前已找到原因,但似乎无解。。。
function foo() {
$lua = new \Lua();
$lua->assign(‘xxx’, function() {});
// 清理匿名函数空间
$ref = new \ReflectionClass($lua);
foreach ($ref->getProperties() as $property) {
if($property->getName() === ‘_callbacks’) {
$property->setAccessible(true);
$property->setValue($lua, null);
}
}
}
I enjoy reading an article that will make men and women think.
Also, many thanks for permitting me to comment!
现在的游戏开发从大家口中了解到的情况是,游戏的后端都是用 java 或者 python , 没有用php 这个…….Laruence你怎么看…….
Great beat ! I would like to apprentice while you amend your website,
how could i subscribe for a blog site? The account
helped me a acceptable deal. I had been a little bit acquainted of this your broadcast offered bright clear concept
[…] 我开发了一个php扩展( PLua – Lua for PHP , […]
[…] http://www.laruence.com/2011/06/19/2047.html PLua – Lua for PHP […]
很有意思。这样学lua有动力了。。。
这个比较有意思,调用方式也是很有嵌入的感觉,
plua有自己独立的vm?