先定義這兒指的 framework,就是像 Laravel 這類 Architectural pattern。
該不該用 framework 呢?哪一個 framework 最好用呢?我的看法是,無論如何選擇,永遠都會有更好的方法。
既然如此,那就問天吧!
By zh:User:Prattflora (wiki zh) [GFDL (http://www.gnu.org/copyleft/fdl.html) or CC-BY-SA-3.0 (http://creativecommons.org/licenses/by-sa/3.0/)], via Wikimedia Commons |
無論用或不用
- Always RTFM !!
- 那些太無聊的東西,就不要再提了,例如用了 framework 會降低效能之類的。
- 就像會 jQuery,跟會 Javascript ,完全是兩回事;會用 PHP 的 Framework,並不代表就會 PHP。
- 一定要讀 PHP-FIG 的 PSR。
- 這個領域是不斷在改變的,當你一口咬定「不需要」什麼東西,你必定會因為這個決定倒楣。
到底是用或不用
這個決定不是婚約,不用堅持一生一世 (就算是,也不太需要堅持),更改決定一點也不丟臉。
全用
如果要用,就好好的用。
如果是團隊的話,有個 framework 作為共同的基礎是不錯的,一下子就建立了很多「標準」,省事很多;至於用哪一個,選錯了,絕對是悲劇,實在不會選,就先選最多人用的吧!
不用
每一個你想要自己寫的元件 (例如說,寄出 Email 的元件),網路上都已經有現成的了,所以,將所需元件,拼拼湊湊後,也宛如一個 framework;這些事情多做幾次,就有了自己的 「宛如 framework」。
不用的好處:
- 才有機會用 PHP
- 比較安全,因為就算寫得很爛,也不容易被人知道
- 效能可以調整到比用 framework 好
- 保持彈性,元件選錯了,日後更換比較容易
不用的壞處:
- PHP 一升級就很麻煩
- 必須花時間在各個元件的維護上
- 各個元件的 coding 風格不一
我的選擇
我是不用 framework,自己拼拼湊湊,以下是三個很重要的:
- Smarty (http://www.smarty.net/)
- mysqli_ext.class.php (https://www.wolfsoftware.com/)
- Mobile_Detect.php (http://mobiledetect.net)
Smarty
我非常依賴 Smarty,但有些文章對 Smarty 有很深的誤解呀!
Smarty 是個 Template Engine,它的功能,簡單說就是把程式的邏輯,跟顯示的邏輯分開來,分開之後,前端、後端的人就不會互相干擾,也不會被對方的進度耽誤。
簡單說,如果有用 Smarty,那麼團隊裡面,負責寫 PHP 的A,負責寫樣板 (就是一堆 HTML、CSS、JavaScript... ) 的B,他們只要溝通好每頁需要由 PHP 提供的內容,以及使用的變數型態和名稱,接下來就各做各的事情,進度不會互相牽制。
設計樣板,就跟設計程式一樣,同樣都要把重複的部分挑出來,然後用繼承的方式重複使用。
A和B能夠把 Smarty 應用到怎樣的狀況,就靠各自的功力了;那不懂 Smarty 怎麼辦?既然已經決定要用 Smarty,不懂就去學,不學就開除,這種問題值得討論嗎?
Caching
Smarty 的 Cache 相當好用, 不過 caching 的資料量大的話,記得要使用子目錄 ($use_sub_dirs=$true),一段時間,就回來把老舊的 cache 資料刪除。
mysqli_ext.class.php
修改後,可以去 master 或 slave 的 MySQL,並且節省 connect 的次數。
Mobile_Detect.php
決定要用 mobile 的 Smarty 樣板,或是 desktop 的樣板。
URI Routing
用 Nginx 的 rewrite 達成,這樣當然比用 PHP 達成快。
結語是....
因為會有人問我用哪個 framework,或者希望我給建議,每次都要解釋一堆,所以就先寫好,以後可以回答個 QR Code。