iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 1
0
自我挑戰組

重新理解 PHP:從頭打造 Web Framework系列 第 1

為何要從頭打造一個框架?

  • 分享至 

  • xImage
  •  

前言

「我想用 PHP 打造一個屬於自己的框架。」

聽到這句話,任何具有常識的程式設計師,都會白你兩眼,然後鄙視似地告訴你:「睏矇睏,嘜眠夢啊」(台語:睡就睡,別在那做夢)。

他們會毫不猶豫地告訴你「重複造輪子」是多麼糟糕、多麼愚蠢的行為,並且拿出 CodeIgniter、Laravel、Phalcon 或 Yii 擺在你眼前,告訴你:「從現有的框架中選擇一個來用,然後忘掉你那可笑的妄想!」
在大部份情況下他們是正確的,但還是有些理由讓你可以打造一套屬於自己的框架:

  • 基礎功:我們沒有理由反對自己具備更深厚的基礎功,而在打造框架的過程中,我們會嘗試瞭解那些令人驚豔的想法(例如 Dependency Injection)或方便功能(例如 Laravel Facade)的是如何被實作的。
  • 規畫力:進階的程式設計師比初階有更多的實作經驗,瞭解在某些情況應該採用什麼樣的解決方案;資深的程式設計師則比進階來的有遠見,從規畫時就想到未來可能產生的問題並提早解決它(或是讓它根本不會出現),有打造框架的經驗無疑地會讓自己擁有更多規畫概念與想法。
  • 趣味性:實驗性地創造一些東西是充滿樂趣的,僅管這東西可能根本不會被實際應用,但在實踐的過程中學習何嘗不是令人振奮的呢?
  • 重構力:程式設計師都喜歡規畫良好的程式碼,然而日常生活中基本上遇到的都是一坨又一坨的狗屎,各種充滿業障與歷史共業的糟糕玩意,當你嘗試著手重構時又覺得窒礙重重,不知如何將它變得更加「現代」

因此,在未來的 30 天中,我將挑戰以 PHP 打造一個現代的 Web Framework。老實說我認為這相當地艱難,畢竟我將每日規畫訂立之後發現有許多玩意連自己都不太熟悉。
這是我報名「自我挑戰」組別的理由一:我不認為我能夠在不拖稿的前提下兼顧工作及研究,也不認為自己能在完整 30 天內完成這期的鐵人賽。

再者,這 30 天的挑戰主要是以 Symfony Framework Documention 的 Create your own PHP Framework 為基礎進行改寫。
這是我報名「自我挑戰」組別的理由二:為避免著作權爭議,在未另行說明的情況下,此挑戰賽系列文章的所有文字內容皆以 CC BY-SA 3.0 方式分享,且挑戰賽系列程式碼則以 MIT 授權釋出。

前置條件

在此聲明,這系列挑戰賽文章客群並非初學者,如果你是剛接觸 PHP 不久的夥伴(僅管你可能精通某種技術或某些語言),我不建議你閱讀這系列的文章--無疑地這會打壞你學習 PHP 的胃口。

我希望這系列文章的閱讀者:

  • 具有 PHP with OOP 程式設計的經驗,或退一步來說,我希望你至少擁有物件導向程式設計(OOP)的經驗
  • 瞭解基礎 Unix-Like 系統指令,能不排斥 CLI(Command Line Interface,命令列介面)
  • 會使用 Git 版本控制,如果你想臨時抱佛腳的話,我推薦 連猴子都能懂的 Git 入門指南

為了完成這系列文章的程式或工作流程,你可能還需要準備下列工具,我預設你已經安裝並學會如何使用它們的基礎指令:

  • PHP 7.0 (含)以上版本(建議使用 PHP 7.2)
  • Composer
  • Git

如果有機會的話,本系列文章也會提到一些選用的工具及工作流程(就算不安裝也不影響正式內容,視讀者需要再安裝即可),在此預設你已經安裝或設定好他們:

聲明 1:在此選用 Google Cloud Platform 純粹為個人習慣與喜好,本篇挑戰賽並未收受 Google Inc. 或其它任何相關企業有形/無形贊助,讀者可利用 Amazon 等其它服務代替之
聲明 2:在此選用 Docker 純粹為營合市場需求,本篇挑戰賽並未收受 Docker Inc. 或其它任何相關企業有形/無形贊助,讀者可利用 Moby 開源容器軟體代替之
聲明 3:本系列挑戰賽目前未收受任何個人/法人贊助,未來將不再一一提及,若有意贊助本篇挑戰賽請 email 至 song374561@gmail.com,主旨請標明「2017 iThome 鐵人賽贊助提案」洽談

寫在最後

對於本次挑戰賽有任何想法、內容勘誤或疑問,都請各先進不吝指教。
可利用 email 與我聯絡,主旨煩請註明「2017 iThome 鐵人賽想法/勘誤/提問」以利後續回覆。


下一篇
規畫
系列文
重新理解 PHP:從頭打造 Web Framework9
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言