20150110--魔术方法魔术常量+面向对象-02
設計模式
1. 什么是設計模式?
指的是一種已經成熟話的設計規范,通過這種規范,能夠達到某種指定的要實現的效果。
php中,只有簡單的設計模式:單例模式,工廠模式
單例模式
1. 什么是單例模式?
單例模式,只有一個實例(對象),一個類只能產生一個對象。
要實現單例模式,必須解決以下問題
1. 確定有哪些方式可以產生新的對象:new和clone,必須禁用這兩種方法:私有化構造方法和克隆方法
2. 如何在封閉了外部產生對象的途徑之后,進入到內部產生?解決方案:靜態方法,可以不需要在外部創建對象的前提下,可以進入到類的內部。
3. 如何在內的內部要得到對象?解決方案:在靜態方法中可以創建對象
問題:該靜態方法可以被多次調用,因此會產生多個對象
4. 解決方案:增加一個靜態屬性用來保存生成的對象,如果后面再次新增對象的話,得先判斷對象是否存在,存在就不創建。
效果
對象判斷方式:instanceof,判斷一個對象是否屬于某個類
總結:單例模式要實現:三私一公(私有化構造方法,私有化克隆方法,私有化靜態屬性,公有化的靜態方法)
工廠模式
1. 什么工廠模式?
類似工廠一樣,需要什么類的對象,就產生對應類的對象。
工廠模式要實現:能夠生產對象,能夠加載類。
PHP是一種既支持面向過程又支持面向對象的語言。不是所有的面向對象語言都有類的概念,如js。(可以忽略)
面向對象三大特點
面向對象的三大特點:封裝,繼承和多態
封裝
封裝:面向將數據(屬性)以及對數據的操作(方法)捆綁到一起,形成對外的數據隱藏。只對外提供可以調用的接口供其使用。(public的方法和屬性)
封裝的過程稱之為抽象:將具有相同特性的一類事務,把公共的內容抽離出來,形成文字描述的過程。
繼承
繼承:子輩擁有父輩的財富(屬性)或者工作(方法)
如果一個類已經定義好可以使用的方法和屬性了,但是有一個類想在該類的基礎上進行擴展。擴展類就可以從已有的類繼承,將已有的屬性和方法都直接應用,而不用自己再去定義。
繼承的優點
1. 便于擴展(子類可以在父類的基礎上增加自己的特點)
2. 節省代碼:提高代碼的復用性
父類
class Father{
//財富(屬性)money
//工作(方法):makeMoney();
}
子類:繼承
class Son extends Father{
//沒有自己工作,繼承父親的工作:makeMoney()
}
多態
多態:多種形態,在存在繼承的情況下,子類必須重寫父類的方法(子類擁有與父類同名的方法)
父類
class Father{
function makeMoney(){
//種樹
}
}
子類:繼承自父類
class Son extends Father{
function makeMoney(){
//賣菜
}
}
//模擬Java
Father father = new Son();
father.makeMoney(); //賣菜
PHP繼承
繼承:子類可以使用父類的屬性和方法。
繼承語法
父類:擁有一些可以被繼承的屬性和方法
子類:想擁有自己不存在但是在別的類中存在的屬性和方法
關鍵字:extends
子類 extends 父類
繼承屬性的訪問(類內):公有的和受保護的都可以
繼承屬性的訪問(類外):只有公有的可以
繼承內容
繼承中不講靜態的繼承,php中的繼承是子類對象繼承父類的對象。(靜態的屬性和方法也依然滿足繼承條件,可以使用)
子類會繼承父類的所有的屬性(非靜態)和非私有的方法(非靜態)
protected
受保護的,是一個專門用于繼承的關鍵字(訪問修飾限定符),用protected關鍵字修飾的屬性或者方法,可以在子類中直接使用,但是不能在子類的外部使用。
雙向繼承
繼承默認的是子類繼承父類,但是其實在父類里面也可以同樣的使用子類里面的屬性和方法,只要滿足(public和protected),所以認為繼承是雙向的。
重寫
子類擁有與父類同名的屬性或者方法,就會覆蓋父類的屬性或者方法。
屬性重寫
重寫的效果
繼承內存分析
posted on 2016-04-20 22:58?山山未遲 閱讀(...) 評論(...) 編輯 收藏
轉載于:https://www.cnblogs.com/lifushan/p/5414873.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的20150110--魔术方法魔术常量+面向对象-02的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实验三 白盒测试
- 下一篇: 人生苦短,请好好珍惜自已的身体