Better Array, Better PHP

PHP 的 array() 大家都是詬病已久了,總是在想,要是能像其他語言一樣,用個中括號括起來就好那該有多好。

昨天剛好看到鐵神分享的這篇 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 版來編譯

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!

Comments