作者hSATAC (cAt Ash)
看板PHP
标题[心得] 用 [] 取代 array()
时间Sat Jun 11 22:06:55 2011
网志好读版:
http://blog.hsatac.net/?p=444
PHP 的 array() 大家都是诟病已久了,总是在想,
要是能像其他语言一样,用个中括号括起来就好那该有多好。
昨天刚好看到铁神分享的这篇 PHP Hacking
(
http://www.xarg.org/2011/06/php-hacking/) ,
作者把 PHP 修改了许多小地方,除了上述的新 array 语法外
,还有许多新增函式和效能调校,感觉真的很不错。
不过我最想要的只有 array 这个语法,而且不想被作者的版本
绑死,於是我决定下载他的程式码来研究一下如何修改。结果发
现,只要改一行,就可以拥有这个功能!
以下纪录一下我修改成功的过程,我开了一台乾净的
Ubuntu 11.04 vm 出来测试。
首先抓好 PHP 5.3.6 的原始码生肉,找到
Zend/zend_language_parser.y 这个档案:
找到
| T_ARRAY '(' array_pair_list ')' { $$ = $3; }
这行,在下面多加一行
| '[' array_pair_list ']' { $$ = $2; }
接着安装一些必要的元件:
sudo apt-get install apache
sudo apt-get install apache2-prefork-dev #要编译成 libphp5.so 需要装这个
sudo apt-get install libxml2-dev
sudo apt-get install re2c
接着还要安装 bison ,apt-get 装的 bison 版本太旧不合用,
可以自己去抓 2.3 版来编译
(
http://www.gnu.org/software/bison/)
bison 需要 m4, 所以编译过程中有需要的话就 apt-get install m4 吧。
以上准备工作都做好後,就可以开始编译 PHP 啦。
./configure --prefix=/usr/local/lib/php5.3.6.infusion /
--with-apxs2=/usr/bin/apxs2
make && sudo make install
记得在 configure 的过程要注意有没抓到 bison ,这是最重要的,如果没抓到的话这个
修改是不会有作用的。
都编完以後赶快
a2enmod php5
sudo apachectl restart
来试试看有没有成功吧!
我编完以後,8245个测试都跑过了,应该是没问题,enjoy it!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 221.169.252.14
1F:推 dylan29341:想知道为什麽array()诟病已久 @@ 06/11 23:51
2F:→ gname:楼上 +1 ... 06/12 00:00
3F:推 BloodyDawn:+1 06/12 00:49
4F:推 chief84:+1 06/12 00:53
5F:推 UniFish:用[]你怎麽直接指定hash array? 06/12 01:32
6F:→ arrack:+1 06/12 02:01
7F:→ dylan29341:array()超好用的耶 06/12 02:42
8F:→ hSATAC:@UniFish: ['key' => 'value'] 即可 原文有图 06/12 08:38
9F:→ hSATAC:@dylan29341 并没有说array不好用 这个修改不改变 array 06/12 08:39
10F:→ hSATAC:的行为,只改变array的语法 从此不用打 array() 只需要打[] 06/12 08:39
11F:推 Jerr:有创意 但是当你要跟别人share code的时候就囧了 06/12 09:44
12F:推 EAFV:php的array跟其他很多语言比已经是很方便了 06/12 09:46
13F:→ knives:楼上+1,你真的有用过其他家的阵列吗 06/12 10:12
14F:推 xxxzzz:可惜牺牲了移植性 06/12 10:19
15F:→ gname:PHP 的阵列已经非常好用了!! 私心认为那个小小的点没差啦... 06/12 10:25
16F:→ bibo9901:同xxxzzz, 为了少打几个字牺牲移植性 感觉不太划算QQ 06/12 10:53
17F:推 tkdmaf:基本如果程式不具备可移植性真的就不用考虑了。 06/12 20:14
18F:→ linhomeyeu:yacc耶 最近写compiler做业用很凶QQ 06/13 02:47
19F:→ linhomeyeu:不过JS的array指定真的是用的很舒适 06/13 02:47
20F:→ linhomeyeu:边写JS边写PHP有时真的会想用JS语法QQ 06/13 02:47
21F:→ arrack:还是没说诟病在那里?多打了几个字? 06/14 17:32
22F:→ hSATAC:对啊 就多打字啊 第三行不就有讲了? 06/14 19:06
23F:→ JoeHorn:所以? *诟病*变数名称太长,改用a,b,c,... 也挺合理? XD 06/14 20:09
24F:→ dylan29341:没有"大家"诟病已久吧XD 应该是你自己诟病已久.. 06/14 21:24
25F:→ shadowjohn:谢好研究心得无私分享~ 06/14 23:21
26F:→ MOONRAKER:不但没有意见而且还打成Array() 括号内前後留空格 06/15 08:20
27F:→ allenmusic:阵列 别家是比较方便XD 06/15 15:46
28F:推 grassboy2:该来朝圣了!!! 03/03 18:44
29F:推 kusoayan:原来这篇当初有这麽多反对声浪阿XD 03/04 09:12
30F:推 etetet91:朝圣m(_ _)m 03/05 12:57
31F:推 bcse:朝圣 03/05 23:41
32F:推 liaosankai:朝圣+1 03/08 11:29