起因是这样,我想把网站做成游戏系统,最近刚把引擎换好。这套开源系统功能已经很丰富了,有微博、论坛、积分商城、群组神马的,但是没有最核心的任务系统。
我知道一般C语言会配合lua来实现动态语言的效果,之前写Java版核心时也考虑过用Groovy来处理,可是现在的核心是php,这语言我还不熟,就有点蒙了。是引入第三方脚本语言,还是用php本身可以实现?如果本身可以实现,是否是生成代码文件的形式?
下面还有个加分问题,一般游戏中的任务系统类型还是比较简单,如果让这段动态语言可以判断到例如
1 签到
2 发图片微博
3 获得赞
4 通过程序接口上传第三方数据
那么上面分析的动态语言是否可行。如果很容易满足此目标,那么是否有图形化编程方案,降低难度,让这段内容可以成为用户贡献的一部分。
我错了,不要杀我
首先回答我找到的内容是什么:
call_user_func
这个函数同call_user_func_array 一样构成了php的动态调用函数。
我在找到这个答案以前以为会像Java执行Groovy这种模式去调用,在得到这个答案并对比了项目中的代码后发现不是这种结构的。而更像是Java中的反射来实现的。先引用一段代码:
WWW\osv2\ThinkPHP\Mode\Api\functions.php:
200 $result[$key] = is_array($val)
201 ? array_map_recursive($filter, $val)
202 : call_user_func($filter, $val);
203 }
204 return $result;
...
471 parse_str($vars,$vars);
472 }
473: return call_user_func_array(array(&$class,$action.C('ACTION_SUFFIX')),$vars);
474 }else{
475 return false;
以上代码来自于Opensns, 感兴趣的童鞋可以在这里下载 http://git.oschina.net/yhtt2020/OpenSNS-V2
找到程序调用的环节后,我又查看了数据库存入的内容:
'a:1:{i:0;a:5:{s:5:"table";s:6:"member";s:5:"field";s:1:"1";s:4:"rule";s:2:"10";s:5:"cycle";s:2:"24";s:3:"max";s:1:"1";}}'
该端内容描述的意思是在后缀为member的表中,每24小时登录可以积累10分,最多积累1次。
我还没来得及看这段伪代码是如何解析为程序能够识别的方法的,因为这段数据能够描述的情况相对比较固定。而我要实现的任务功能,它的灵活性要达到能够判断服务端的任何一种相应。举几个例子:
任务1:微笑的日常(每天上传一张微笑的图片) 程序的要求要至少能够判断,用户在此任务下,上传了一张图片。
任务2:永不停歇的脚步(每天步行10000步,通过第三方运动app获得当天的运动数据)
任务3:闪客(回复中贴一段视频,并获得10个以上的赞)
有关call_user_func的具体用法,暂时还无法分享。找到此方法的时候我就发现这似乎是一个小白问题,接触PHP时间短,迅速跳到应用开发的环节多少有些吃力。不过任务模块会是趣儿岛最核心的模块,相信以后的二次开发中会时常使用这个功能,有任何新的体会,我再回来继续更新。也欢迎php开发者赐我建(yi)议(si)。
趣儿岛网站 www.qurdao.com 公测了,欢迎访问
您的砖头是我成长的动力,在此多谢了
大周末开始升级OS系统,因为之前在windows上测试过,更新的内容都是我没改过的,文件和数据库都可以直升。 本地测试时也未表现出任何问题,因此信心满满的准备升级生产环境了。
结果,悲剧了...
-> 先是自动升级失败了,提示的对比列表,基本上所有的文件都是权限不足。我看涉及的文件夹太多了,全部给777太危险,不如一个一个加吧。加了几个以后,后台无法访问了,我去~~~ 好在都记录了,马上还原权限,又救回来了。
-> 既然这样就手动上传吧,从服务器down下来升级压缩包以后上传到服务器,手动解压。然后就无脑点下一步呗。点完发现版本号没有升级,而程序和数据都升上去了。搞什么飞机?
-> 上google搜什么问题,没答案,上Q群问,都放假了,自己动手吧。试了几种方案:
总之大半天的升级之旅算是结束了