[心得] 用 [] 取代 array()

看板PHP作者 (cAt Ash)時間14年前 (2011/06/11 22:06), 編輯推噓13(13019)
留言32則, 23人參與, 最新討論串1/1
網誌好讀版: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

06/11 23:51, , 1F
想知道為什麼array()詬病已久 @@
06/11 23:51, 1F

06/12 00:00, , 2F
樓上 +1 ...
06/12 00:00, 2F

06/12 00:49, , 3F
+1
06/12 00:49, 3F

06/12 00:53, , 4F
+1
06/12 00:53, 4F

06/12 01:32, , 5F
用[]你怎麼直接指定hash array?
06/12 01:32, 5F

06/12 02:01, , 6F
+1
06/12 02:01, 6F

06/12 02:42, , 7F
array()超好用的耶
06/12 02:42, 7F

06/12 08:38, , 8F
@UniFish: ['key' => 'value'] 即可 原文有圖
06/12 08:38, 8F

06/12 08:39, , 9F
@dylan29341 並沒有說array不好用 這個修改不改變 array
06/12 08:39, 9F

06/12 08:39, , 10F
的行為,只改變array的語法 從此不用打 array() 只需要打[]
06/12 08:39, 10F

06/12 09:44, , 11F
有創意 但是當你要跟別人share code的時候就囧了
06/12 09:44, 11F

06/12 09:46, , 12F
php的array跟其他很多語言比已經是很方便了
06/12 09:46, 12F

06/12 10:12, , 13F
樓上+1,你真的有用過其他家的陣列嗎
06/12 10:12, 13F

06/12 10:19, , 14F
可惜犧牲了移植性
06/12 10:19, 14F

06/12 10:25, , 15F
PHP 的陣列已經非常好用了!! 私心認為那個小小的點沒差啦...
06/12 10:25, 15F

06/12 10:53, , 16F
同xxxzzz, 為了少打幾個字犧牲移植性 感覺不太划算QQ
06/12 10:53, 16F

06/12 20:14, , 17F
基本如果程式不具備可移植性真的就不用考慮了。
06/12 20:14, 17F

06/13 02:47, , 18F
yacc耶 最近寫compiler做業用很兇QQ
06/13 02:47, 18F

06/13 02:47, , 19F
不過JS的array指定真的是用的很舒適
06/13 02:47, 19F

06/13 02:47, , 20F
邊寫JS邊寫PHP有時真的會想用JS語法QQ
06/13 02:47, 20F

06/14 17:32, , 21F
還是沒說詬病在那裡?多打了幾個字?
06/14 17:32, 21F

06/14 19:06, , 22F
對啊 就多打字啊 第三行不就有講了?
06/14 19:06, 22F

06/14 20:09, , 23F
所以? *詬病*變數名稱太長,改用a,b,c,... 也挺合理? XD
06/14 20:09, 23F

06/14 21:24, , 24F
沒有"大家"詬病已久吧XD 應該是你自己詬病已久..
06/14 21:24, 24F

06/14 23:21, , 25F
謝好研究心得無私分享~
06/14 23:21, 25F

06/15 08:20, , 26F
不但沒有意見而且還打成Array() 括號內前後留空格
06/15 08:20, 26F

06/15 15:46, , 27F
陣列 別家是比較方便XD
06/15 15:46, 27F

03/03 18:44, , 28F
該來朝聖了!!!
03/03 18:44, 28F

03/04 09:12, , 29F
原來這篇當初有這麼多反對聲浪阿XD
03/04 09:12, 29F

03/05 12:57, , 30F
朝聖m(_ _)m
03/05 12:57, 30F

03/05 23:41, , 31F
朝聖
03/05 23:41, 31F

03/08 11:29, , 32F
朝聖+1
03/08 11:29, 32F
文章代碼(AID): #1DytQ2rN (PHP)
文章代碼(AID): #1DytQ2rN (PHP)