用 PHP 的 Frameworks?

先定義這兒指的 framework,就是像 Laravel 這類 Architectural pattern。

該不該用 framework 呢?哪一個 framework 最好用呢?我的看法是,無論如何選擇,永遠都會有更好的方法。

既然如此,那就問天吧!

用 PHP 的 Frameworks?
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

無論用或不用

  1. Always RTFM !!
  2. 那些太無聊的東西,就不要再提了,例如用了 framework 會降低效能之類的。
  3. 就像會 jQuery,跟會 Javascript ,完全是兩回事;會用 PHP 的 Framework,並不代表就會 PHP。
  4. 一定要讀 PHP-FIG 的 PSR
  5. 這個領域是不斷在改變的,當你一口咬定「不需要」什麼東西,你必定會因為這個決定倒楣。

到底是用或不用

這個決定不是婚約,不用堅持一生一世 (就算是,也不太需要堅持),更改決定一點也不丟臉。

全用

如果要用,就好好的用。

如果是團隊的話,有個 framework 作為共同的基礎是不錯的,一下子就建立了很多「標準」,省事很多;至於用哪一個,選錯了,絕對是悲劇,實在不會選,就先選最多人用的吧!

不用

每一個你想要自己寫的元件 (例如說,寄出 Email 的元件),網路上都已經有現成的了,所以,將所需元件,拼拼湊湊後,也宛如一個 framework;這些事情多做幾次,就有了自己的 「宛如 framework」。

不用的好處:

  1. 才有機會用 PHP
  2. 比較安全,因為就算寫得很爛,也不容易被人知道
  3. 效能可以調整到比用 framework 好
  4. 保持彈性,元件選錯了,日後更換比較容易

不用的壞處:

  1. PHP 一升級就很麻煩
  2. 必須花時間在各個元件的維護上
  3. 各個元件的 coding 風格不一

我的選擇

我是不用 framework,自己拼拼湊湊,以下是三個很重要的:

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。

用 PHP 的 Frameworks?