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