原创 深入PHP面向對象、模式與實踐——讓面向對象編程更加靈活的模式(3)

外觀模式 外觀模式可以爲複雜系統創建一個簡單、清晰的接口。 下面是一些故意讓人混淆的不着邊際的代碼: function getProductFileLines($file) { return file($file); }

原创 深入PHP面向對象、模式與實踐——生成對象(1)

單例模式 生成對象的問題和解決方案 abstract class Employee { protected $name; public function __construct($name) {

原创 深入PHP面向對象、模式與實踐——讓面向對象編程更加靈活的模式(2)

裝飾模式 組合模式幫助我們聚合組件,而裝飾模式則使用類似結構來幫助我們改變具體組件的功能。 裝飾模式使用組合和委託而不是隻使用繼承來解決功能變化的問題。實際上,Decorator類會持有另外一個類的實例。Decorator對象會實

原创 深入PHP面向對象、模式與實踐——執行及描述任務(1)

解釋器模式 構造一個可以用於創建腳本化應用的迷你語言解釋器。 abstract class Expression { private static $keycount = 0; private $key;

原创 深入PHP面向對象、模式與實踐——對象與設計

設計基礎 代碼設計的定義 對“代碼設計”的理解涉及系統的定義:確定系統的需求、作用域及目標。從底層上看,設計是定義系統組成並組織各組件間關係的過程。本章從另一個角度考慮:類和對象的定義和配置。 面向對象的系統由一系列的類組成。

原创 深入PHP面向對象、模式與實踐——生成對象(3)

原型模式 平行繼承層次的出現是工廠方法模式帶來的一個問題。一個避免這種依賴的方法是使用PHP的clone關鍵詞複製已存在的具體產品。然後,具體產品類本身便成爲它們自己生成的基礎。這便是原型模式。使用該模式我們可以用組合代替繼承。這

原创 深入PHP面向對象、模式與實踐——模式原則(2)

解耦 如果類之間有非常強的依賴性,那麼這樣的系統就很難維護,因爲系統裏的一個改動會引起一連串的相關改動。 問題 重用性是面向對象設計的主要目的,而緊耦合便是它的敵人。當我們看到系統中一個組件的改變迫使系統其他許多地方也發生改變

原创 深入PHP面向對象、模式與實踐——對象工具(1)

PHP和包 包是一組相關類的集合,這些類以某種方式組合在一起。包可以把系統的一部分和其他部分分隔開了。PHP還不支持包的概念,但是支持命名空間。 命名空間 命名空間就是一個容器,你可以將類、函數和變量放在其中。在命名空間中,你

原创 深入PHP面向對象、模式與實踐——對象工具(3)

反射API 反射API由一系列可以分析屬性、方法和類的內置類組成。 入門 反射API不僅僅被用於檢查類。例如,ReflectionFunction類提供了關於給定函數的信息,ReflectionExtension類可以查看編譯

原创 深入PHP面向對象、模式與實踐——對象工具(2)

類函數和對象函數 PHP允許使用字符串來動態地引用類: //Task.php namespace tasks; class Task { function doSpeak() { print "he

原创 深入PHP面向對象、模式與實踐——模式原則(1)

組合 模式的啓示 通過以靈活的方式來組合對象,組件能在運行時被定義。《設計模式》將此提煉出一個原則:組合優於繼承。 組合與繼承 繼承是應對變化的環境及上下文設計的有效方式,然而它會限制靈活性,尤其是當類承擔了過多的責任的時

原创 深入PHP面向對象、模式與實踐——設計模式

什麼是設計模式 什麼是設計模式 設計模式便是分析過的問題和問題解決方案所闡釋的優秀實踐。如何處理一個請求?如何將請求數據轉換成系統對應的指令?如何獲得數據?如何顯示結果?等等。隨着時間流逝和經驗積累,我們會或優雅或困難地回答問

原创 深入PHP面向對象、模式與實踐——高級特性(6)

定義對象的字符串值 PHP5中引入的另一個受java啓發的功能是__toString()方法。通過實現自己的__toString()方法,你可以控制輸出字符串的格式。__toString()方法應當返回一個字符串值。當把對象傳遞給

原创 深入PHP面向對象、模式與實踐——組合模式

組合模式 將一組對象組合爲可像單個對象一樣被使用的結構。 組合模式定義了一個單根繼承體系,使具有截然不同職責的集合可以並肩工作。組合模式中的類必須支持一個共同的操作集,以將其作爲它們首要職責。類同時必須擁有添加和刪除子對象的方法。

原创 深入PHP面向對象、模式與實踐——執行及描述任務(2)

策略模式 在系統中定義算法並以它們自己的類型封裝。 只要發現自己正不斷地在繼承樹的各個分支中重複同一個算法(無論是通過子類還是通過重複條件語句),請將這些算法抽象成獨立的類型。當類必須支持同一個接口的多種實現時,最好的辦法常常是提