在 PHP 編程早期,PHP 代碼在本質(zhì)上是限于面向過程的。過程代碼 的特征在于使用過程構(gòu)建應(yīng)用程序塊。過程通過允許過程之間的調(diào)用提供某種程度的重用。
但是,沒有面向?qū)ο蟮恼Z言構(gòu)造,程序員仍然可以把 OO 特性引入到 PHP 代碼中。這樣做有點困難并且會使代碼難于閱讀,因為它是混合范例(含有偽 OO 設(shè)計的過程語言)。使用 PHP 代碼中的 OO 構(gòu)造 ― 例如能夠定義和使用類、能夠構(gòu)建使用繼承的類之間的關(guān)系以及能夠定義接口 ― 可以更輕松地構(gòu)建符合優(yōu)秀 OO 實踐的代碼。
雖然沒有過多模塊化的純過程設(shè)計運行得很好,但是 OO 設(shè)計的優(yōu)點表現(xiàn)在維護上。由于典型應(yīng)用程序的大部分生命周期都花費在維護上,因此代碼維護是應(yīng)用程序生命周期的重要部分。并且在開發(fā)過程中代碼維護很容易被遺忘。如果在應(yīng)用程序開發(fā)和部署方面存在競爭,那么長期可維護性可能被放在比較次要的地位。
模塊化 ― 優(yōu)秀 OO 設(shè)計的主要特性之一 ― 可以幫助完成這樣的維護。模塊化將幫助封裝更改,這樣可以隨著時間的推移更輕松地擴展和修改應(yīng)用程序。
總的來說,雖然構(gòu)建 OO 軟件的習(xí)慣不止 7 個,但是遵循這里的 7 個習(xí)慣可以使代碼符合基本 OO 設(shè)計標(biāo)準(zhǔn)。它們將為您提供更牢固的基礎(chǔ),在此基礎(chǔ)之上建立更多 OO 習(xí)慣并構(gòu)建可輕松維護與擴展的軟件。這些習(xí)慣針對模塊化的幾個主要特性。有關(guān)獨立于語言的 OO 設(shè)計優(yōu)點的更多信息,請參閱 參考資料。
7 個優(yōu)秀 PHP OO 習(xí)慣包括:
保持謙虛
做個好鄰居。
避免看到美杜莎。
利用最弱的鏈接。
您是橡皮;我是膠水。
限制傳播。
考慮使用模式。
保持謙虛
保持謙虛指避免在類實現(xiàn)和函數(shù)實現(xiàn)中暴露自己。隱藏您的信息是一項基本習(xí)慣。如果不能養(yǎng)成隱藏實現(xiàn)細節(jié)的習(xí)慣,那么將很難養(yǎng)成任何其他習(xí)慣。信息隱藏也稱為封裝。
直接公開公共字段是一個壞習(xí)慣的原因有很多,最重要的原因是讓您在實現(xiàn)更改中沒有應(yīng)有的選擇。使用 OO 概念隔離更改,而封裝在確保所作更改在本質(zhì)上不是病毒性(viral)更改方面扮演不可或缺的角色。病毒性 更改是開始時很小的更改 ― 如將保存三個元素的數(shù)組更改為一個只包含兩個元素的數(shù)組。突然,您發(fā)現(xiàn)需要更改越來越多的代碼以適應(yīng)本應(yīng)十分微不足道的更改。
開始隱藏信息的一種簡單方法是保持字段私有并且用公共訪問方法公開這些字段,就像家中的窗戶一樣。并沒有讓整面墻都朝外部開放,而只打開一兩扇窗戶(我將在 “好習(xí)慣:使用公共訪問方法” 中介紹訪問方法的更多信息)。
除了允許您的實現(xiàn)隱藏在更改之后外,使用公共訪問方法而非直接公開字段將允許您在基本實現(xiàn)的基礎(chǔ)上進行構(gòu)建,方法為覆蓋訪問方法的實現(xiàn)以執(zhí)行略微不同于父方法的行為。它還允許您構(gòu)建一個抽象實現(xiàn),從而使實際實現(xiàn)委托給覆蓋基本實現(xiàn)的類。
壞習(xí)慣:公開公共字段
在清單 1 的壞代碼示例中,Person 對象的字段被直接公開為公共字段而非使用訪問方法。雖然此行為十分誘人,尤其對于輕量級數(shù)據(jù)對象來說更是如此,但是它將對您提出限制。
清單 1. 公開公共字段的壞習(xí)慣
如果對象有任何更改,則使用該對象的所有代碼也都需要更改。例如,如果某人的教名、姓氏和其他名字被封裝到 PersonName 對象中,則需要修改所有代碼以適應(yīng)更改。
新聞熱點
疑難解答