當軟體專案規模擴大至數萬行程式碼,傳統的程序式開發會面臨嚴重的維護困境。模組之間如同一戰前的歐洲列強,結成錯綜複雜的「秘密聯盟」——高耦合導致牽一髮而動全身。修改登入模組的一個變數名稱,可能連鎖導致信用卡處理、發票系統等無關模組全線崩潰。
耦合度衡量模組間的依賴程度,越低越好。理想狀態下,模組應可從現有專案抽離並直接用於新專案。封裝提供了解決方案:模組視為獨立單元,資料溝通透過介面(函數)進行,而非直接存取彼此變數。這就像模組之間禮貌地發送請求,而非窺探內部實作細節。
雖然封裝原則可在任何語言實踐,但 PHP 等程序式語言容易誘導開發者「偷懶」。面向對象程式設計(OOP)從語言層面強制執行封裝,讓良好架構成為自然選擇。
在 OOP 中,模組組織為物件,擁有方法(行為/函數)與屬性(特徵/變數)。類別定義物件的藍圖:若物件是餅乾,類別就是餅乾模。類別的屬性與方法統稱成員(資料成員與方法成員)。
PHP 從 C++ 借鑑物件概念,提供可封裝函數與變數的資料型別。早期 PHP 設計目標非大型專案,但隨著 Zend Engine 發展,支援十萬行以上專案成為可能。使用類別編寫腳本不僅實現程式碼重用,更便於團隊協作與開源分享。
物件導向概念是電腦科學最激動人心的創見之一。初學曲線雖陡峭,但一旦掌握,用物件思維解決問題將變得極其自然。建議從小型專案開始實踐,體會封裝、繼承與多型帶來的架構彈性。