框架文件大小從188KB精簡到131KB,代碼量減少30%,基本功能沒有減少,主要歸功於將很多成員變量public化,大大減少了set/get方法,另外就是重構了一些代碼,尤其是一些以前有點看不下去又不能大改的代碼。 還有一個明顯的變化是把Com改到Ext,以前的想法是組件化(Component),有朋友反饋Com含義不明確容易誤解,我也自覺組件這個詞太大了,就改名Ext(擴展 Extension),簡單一點,核心+擴展。好的命名代碼完成了一半,當然有朋友覺得Ext也晦澀,目前感覺還好了。 和大家分享一些這次2.0開發中兩件有趣的事情: 1)返回值的問題 很久以前在twitter上說過想把所有的返回值都改成{‘code’ : 0, ‘data’ : xxx}這樣的,這次在開發的時候在猶豫要不要把所有的返回值都改成這樣。 PHP還不是一個完全面向對象的語言,至少不能像python那樣重載__bool__方法,這樣直接的結果,我不能直接判斷返回值,原來 if ($obj->foo($bar)) { // do something } 如果改返回數組,代碼要改成: $result = $obj->foo($bar); if (0 === $result['code']) { // do something } 不太喜歡,多了一行代碼,也不符合”懶惰”程序員的思維,會調整很多人的”神經”。 最近也很喜歡Go語言的錯誤處理方式,返回數據以及錯誤信息,所以ColaPHP返回值大多改造成還是返回操作值,失敗就返回false,但是多提供了一個error成員變量,方便快速獲取錯誤信息: if ($obj->foo($bar)) { // do something } else { var_dump($obj->error); } 算是一個trade-off的方案吧,不過還是比較滿意。 2) 異常處理 ColaPHP 1.x版本挺喜歡拋異常的,一些影響流程的錯誤全部拋異常,簡單粗暴直接有效。在開發2.0的時候猶豫是不是要給使用者友好的錯誤信息,不想使用者一用到ColaPHP的代碼就try {} catch {}之類的,流程斷不斷,交給程序員自己控制(這也是ColaPHP的設計哲學之一)。 猶豫了許久,google了一些PHP處理異常方式方法的文章,看到Laruence的我們什麼時候應該使用異常?,權衡一下還是覺得直接拋比較好,相比try-catch,更難忍受充斥著if-else的代碼,兩害取其輕吧。 總的感覺,ColaPHP 2.0又回到了初見,原本簡單。