跳到主要內容

讀書心得: 專業PHP 5程式設計

原文書名:Professional PHP 5

如果你受夠了一般坊間的書對PHP物件導向的膚淺介紹,喔,對,就像學生跟老師的class、或者狗跟貓繼承了動物所以都會叫,這種看了好像有點道理,但是完全無法瞭解與網頁程式有什麼相關的屁話,那麼這本書鐵定會給你不一樣的感受。該怎麼說呢,我看過的書裡,真的能「有效」利用物件導向來改善PHP網頁開發流程,這是第一本。

PHP的風格基本上就是大雜燴,html與程式碼夾雜一起。這也無可厚非,因為快速直覺就是PHP的特色。但是你可能很難想像,PHP也可以寫得有組織,有條理,很容易開發跟維護。就像本書的第一部份介紹的:PropertyObject,將資料以物件封裝起來,切開資料庫跟網頁的關聯,於是乎網頁的程式變得很簡潔,很好讀,資料部份的程式也因為集中在一起,很容易維護。這種工具封裝再利用恰巧展現了物件導向的威力,傳統的PHP鐵定做不到的,給當時的我很大的震撼。於是我照著書本的想法自己寫了一個輕巧的資料存取模組,用在網路程式課程的期末專題。起頭碰到很多困難,花了很多時間在調校物件,但一旦工具準備好後,倒吃甘蔗的感覺就來了,最後一天晚上甚至一口氣衝完好多個頁面功能,這是我人生第一次嚐到物件導向的甜頭,原來物件導向真的有用,而且很有用。

在今天PHP Framework滿天飛的狀況來看,這本書的內容其實有些過時了。比方說後來我發現我寫的資料存取小模組原來有個專有名詞叫做ORM,而且網路上有很多高手寫了更好用、更強大的ORM。一些知名框架像CakePHP、 CodeIgniter甚至提供了非常完善的解決方案來組織整個網站。回頭來看這本書的工具,是太陽春了。不過畢竟那都是別人寫好的工具,光使用也不會有什麼長進。有基本的PHP知識,想要一窺這些超級工具開發的秘密,那我認為這本書是非常好、非常難得的敲門磚。程式師圈子裡有句話叫做「Eat Your Own Dog Food」,意思是程式員必須要使用自己開發的工具來改善自己的工作,那本書就是這句話最好的實踐。

本書的內容其實不只這些小工具,還有很多內容像是Design Pattern、SOAP、MVC、專案管理等等,簡直就是包山包海了,個人認為Design Pattern的部份沒什麼有用的例子,後面我則是沒有細看,不好評論。

有些缺點不得不說:其一是code很長而解釋稍嫌不足,而且code實在寫得太醜了,閱讀來實在很痛苦。我想一本教學書把程式碼寫得簡潔清楚,可以大大地增進讀者的胃口。其二是本書讀來很明顯就是分成四塊,這也沒什麼,因為有四位作者嘛,但慘的是這四位顯然配合的不好,以致於書裡產生了 PropertyObject 與 GenericObject 這兩套明明目的差不多,但就是不同的兩套實做。我初讀還困惑了一下。

留言

這個網誌中的熱門文章

讀書心得: 你以為你以為的就是你以為的嗎?

當初想要接觸哲學的時候,挑上的第一本書就是「你以為你以為就是你以為的嗎?」,因為書名太好玩了。讀完後發現內容也一樣好玩,整本書的形式有點像坊間流行的心理測驗小書,每章的開頭都要讀者先做一組題目,後面接著就對你的答案做一番分析。 我自己的讀後感是,恩,這些題目對一個以前從未接觸過哲學的人來說太過犀利,第一次作答的時候,每翻過一頁都好像在呼自己巴掌,臉頰很燙。 「你以為你以為就是你以為的嗎?」書名念起來很拗口,但是很貼切,因為這些題目為的是要檢查我們腦袋內的想法是否一致,在邏輯上有沒有BUG。 我舉個例子,書裡有道題目「只要不傷害他人,任何人都有權自由追求自己的目標」要讀者回答同不同意,我認為這句話聽起來相當合理,所以勾了同意。過了幾題後,出現另一道題目是「為個人吸食而持有毒品的行為應予除罪化」,這次我的直覺是毒品這麼危險,怎麼可以除罪化呢,馬上勾不同意。 但是,我沒有發現這是刻意安排的陷阱,因為這兩句話其實講的是同一回事。 單純個人持有毒品,不散佈也不販賣,就不算傷害他人,那他就應該有自由追求自己的「吸食毒品」目標的權利,畢竟他只有傷害自己呀。這敘述聽起來有點危險,不過我必須承認一開始的確想的不夠清楚,我以為第一句話是真理,但馬上被反例打了自己的臉。 再舉一個例子,首先是「對藝術品的評斷,純粹是個人品味的問題」,接著是「米開朗基羅是史上數一數二的偉大藝術家」,這牽涉到評斷藝術的標準,不過你只能認同兩句話的其中之一。 書中我最有興趣的是「神明DIY工作室」與「信仰殺戮戰場」,這兩章擺明了直衝基督徒而來。當中有些問題圍繞著以下的敘述,如果你同意「神是全知、全能、又全然慈愛」,那該怎麼解釋世界上發生的許多苦難呢? 比如說被南亞海嘯淹沒的小女孩? 如果神沒辦法消除這些苦難,祂就不是全能。如果神沒辦法事先知道創造出來的世界會有這些苦難,祂就不是全知。如果神明知道有苦難,也有能力去掉,但是卻故意不做,那祂就不是全然慈愛。 我思考後的結論是,全然慈愛的神並不等於神希望世上的苦難越少越好,這些苦難都是在祂的允許下發生的。 書裡指出了一個基督徒的通病,被問倒了之後就嚷嚷「你不知道神是超越人所理解的嗎 」,但回頭又馬上賦予神非常明確地人的屬性。後來我也理解到這些尖銳的問題並不是故意要為難我對神的看法,而是逼迫我去反思一些比較深層的宗教議題,就像我...

UVa 10125 Sumsets

解題策略 這題的解法很直接,要找d=a+b+c 用四層迴圈下去跑a,b,c,d就好了 XDDDD 我犯了幾個錯誤 要找最大符合d (意思是數列中可能出現好幾個符合要求的解),所以迴圈應該由最大元素往下找,第一個找到的解就是答案,我一開始由最小元素往上遞增尋找,拿了WA。 沒找到解就回傳0,殊不知0也有可能是解: 0 = -5 + 3 + 2,這裡也吃了一個WA,所以我後來改回傳 INT_MAX 作為無解。 這題有負值,所以 -5 = -10 + -2 + 7 ,這樣算一組合法的解。 是比較需要小心的地方。 官網論壇上的(a+b)=(d-c)法,方法複雜很多,卻沒有比較快。