在PHP 5.4的更新list上, 有一句: 提升了Zend引擎的性能, 减少了内存占用.
那么, 到底是怎么提升的呢?
上个月, 终于算加入了PHP developer team, 一直以来最大的障碍就是语言, 现在想起来, 当年真应该更加认真努力的去学习英语.
得到的第一个任务是: 解决一个feature request, 请求在allow foreach($array as list($a,$b)
大意是说, 希望PHP能支持如下语法:
<?php foreach (array(array(24,2333), array(31,4666)) as $k => list($a, $b)) { printf("key:%s, a=>%s, b=>%s\n", $k, $a, $b); } /** output: key:0, a=>24, b=>2333 key:1, a=>31, b=>4666 */
实现这个功能, 入手点就是去改写PHP的语法分析逻辑, 具体的实现我会再后面附上对PHP5.4的patch.
with 8 Comments从PHP5.3开始, zend_parse_paramters_*函数新增了如下几个新的类型描述符:
f - function or array containing php method call info (returned as zend_fcall_info and zend_fcall_info_cache) H - array or HASH_OF(object) (returned as HashTable*) L - long, limits out-of-range numbers to LONG_MAX/LONG_MIN (long) Z - the actual zval (zval**) * - variable arguments list (0 or more) + - variable arguments list (1 or more)
这也使得我们做扩展开发的时候, 能更加轻松的处理输入参数, 得到想要的值.
with 4 Comments其实一直想写这个系列, 但是一想到这个话题的宽泛性, 我就有点感觉无法组织.
今天我也不打算全部讲如何调试一个PHP的Core文件, 也不会介绍什么是Coredump, 选择一个相对比较简单的方向来介绍, 那就是如何从PHP的Core文件中获取一些对我们重演这个Core有帮助的信息.
上周的时候, 搞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/
本来觉得PPT里没什么东西, 犯不着放出来, 不是内容不丰富哈, 主要都是现场讲的内容.
不过, 既然有人要, 那就放到blog吧, 也当做留个念想.
总体来说, 这次峰会上, 我介绍了Ap(一个PHP扩展编写的PHP框架, 感兴趣的朋友可以看:Yaf-A PHP Framework Extension)在百度的应用.
以下是一些PHP Coding Tips. 当然, 这些Tips并不一定仅仅局限于PHP.
大家有什么好的心得, 欢迎直接回复本文与更多的人分享.. 谢谢
本文长期更新, 请关注PHP Coding Tips
最后更新: 2011/04/02
今天同事eddix告诉我发现一个PHP的warning,
$php --re dummy Warning: Internal error: Cannot find extension function Dummy in global function table in Unknown on line 0
以前没有遇到过, 不知道什么意思.
with 5 Comments在上一篇文章Serialize/Unserialize破坏单例的最后, 我留下了一个问题, 为了让大家能思考, 我就单独再写一篇给出答案.
with 12 Comments