OOP基礎(chǔ)

OOP
一.概述(object oriented programming面向?qū)ο缶幊?

--PHP是混合類(lèi)型的語(yǔ)言

面向過(guò)程
--以事件為解決問(wèn)題的中心
--解決的代碼封裝為自定義函數(shù)
--會(huì)在解決問(wèn)題的過(guò)程當(dāng)中逐步調(diào)用自定義函數(shù)
面向?qū)ο?br> --以功能為中心,注重的是對(duì)象.只有面向?qū)ο缶幊滩攀菑?fù)合人類(lèi)思維邏輯的編程思想.

面向?qū)ο髢?yōu)點(diǎn):一次封裝,多次調(diào)用 提高工作效率,減輕代碼重復(fù)操作

面向?qū)ο蟮奶卣?br> 封裝:把功能相似的函數(shù),放在一個(gè)類(lèi)里 原則:高內(nèi)聚,低耦合
繼承:繼承父類(lèi)的屬性和方法
多態(tài):有繼承關(guān)系的類(lèi)對(duì)象,對(duì)于相同的成員方法調(diào)用,產(chǎn)生不同的結(jié)果.(同名異式)

面向?qū)ο蟮淖谥?
計(jì)算機(jī)程序是由單個(gè)的可以起到子程序作用的單元或者對(duì)象組合而成,這些單元或者對(duì)象為了實(shí)現(xiàn)整體運(yùn)算,他們可以接受信息,發(fā)送信息和對(duì)信息進(jìn)行計(jì)算.

對(duì)象:
世間萬(wàn)物皆為對(duì)象.
對(duì)象不僅僅是具體的事物.例如:小到一個(gè)整數(shù),大到復(fù)雜的飛機(jī).還包括抽象的概念和計(jì)劃.
對(duì)象都具有屬性和行為.

類(lèi)
類(lèi)是對(duì)于具有相似屬性和行為的一組對(duì)象的統(tǒng)一的抽象化的描述.

術(shù)語(yǔ):
1.接口
語(yǔ)法:interface{
public function方法名稱(chēng)() //修飾符一定是public 沒(méi)有方法體
}
接口==>抽象類(lèi),接口==>類(lèi) implements
抽象類(lèi)==>類(lèi) extends
類(lèi)到==>對(duì)象 new
2.抽象類(lèi)
概念:含有抽象的成員方法
語(yǔ)法:abstract class{

    abstract function 方法名稱(chēng)()  //抽象方法,沒(méi)有方法體

    public function 方法名稱(chēng)(){ //普通方法
        方法體
    }   
    
}
特點(diǎn):不能夠?qū)嵗橄箢?lèi) 如果繼承抽象類(lèi),必須重載抽象方法

3.類(lèi):
語(yǔ)法結(jié)構(gòu): [修飾符] class 類(lèi)名 extends 父類(lèi) implements 接口..{
[訪問(wèn)修飾符][static] 屬性名稱(chēng)[=屬性值]

        [訪問(wèn)修飾符][static]  function 方法名稱(chēng)(參數(shù),參數(shù)2){
        }
    }
命名方式:
    大駝峰:每個(gè)單詞首字母大寫(xiě)  (HelloWord)
    小駝峰:首字母小寫(xiě),之后每個(gè)單詞首字母大寫(xiě) (helloWord)
    蛇形:小寫(xiě)+下劃線  (hello_word)
訪問(wèn)修飾符 
    public 
    protected受保護(hù)的.只能在類(lèi)和子類(lèi)中訪問(wèn) 
    private私有的 只能在類(lèi)里訪問(wèn)
方法:
    魔術(shù)方法 
        __get() 在對(duì)象中(類(lèi)的外部)訪問(wèn)非公有化成員屬性時(shí)自動(dòng)調(diào)用
        __set() 給非公有化成員屬性賦初值
        __isset() 
        __unset() 
        __autoload() 
        __clone
        __call() 當(dāng)調(diào)用未聲明的方法時(shí)
        __callStatic 當(dāng)調(diào)用未聲明的靜態(tài)方法時(shí)
    普通方法 [訪問(wèn)修飾符]{關(guān)鍵字聲明}function 函數(shù)名(參數(shù)1 參數(shù)2..){}
    構(gòu)造函數(shù) 類(lèi)實(shí)例化時(shí)自動(dòng)調(diào)用(做實(shí)例化初始化的準(zhǔn)備工作)
    析構(gòu)函數(shù) 收尾工作,釋放資源
屬性:
    變量
    常量:const
關(guān)鍵字:
    final
    static

4.對(duì)象
new 類(lèi)名稱(chēng) 實(shí)例化

5.魔術(shù)常量
LINK
METHOD
二.語(yǔ)法
1.類(lèi)
[一些修飾符]class 類(lèi)名稱(chēng){

}
--類(lèi)文件
  1.一個(gè)類(lèi)文件里面建議只存放一個(gè)類(lèi)
  2.類(lèi)文件名稱(chēng):類(lèi)名稱(chēng).class.php

--1.類(lèi)名稱(chēng)
    命名規(guī)則
    數(shù)字,字母,下劃線,其中數(shù)字不能作為起始.
    類(lèi)名稱(chēng)建議采用大駝峰式命名規(guī)則
    類(lèi)名稱(chēng)要盡量起的有意義

--2.類(lèi)中具有成員屬性和成員方法
   --成員屬性   類(lèi)中的成員屬性的定義,類(lèi)似于在類(lèi)外聲明變量
    -訪問(wèn)修飾符 (public) $變量名稱(chēng);
    -訪問(wèn)修飾符 (public) $變量名稱(chēng)=初值;(不建議直接賦初值)

   --成員方法   在類(lèi)中聲明成員方法和在類(lèi)外聲明自定義函數(shù)是一致的
    
    [訪問(wèn)修飾符] function成員方法名稱(chēng)([參數(shù)..]){
        方法體
        return/echo
    }

2.類(lèi)的實(shí)例化
將類(lèi)轉(zhuǎn)化為對(duì)象的過(guò)程
$變量名稱(chēng)= new 類(lèi)名稱(chēng);

$變量名稱(chēng)= new 類(lèi)名稱(chēng)([參數(shù)]);

--對(duì)于類(lèi)外成員屬性的訪問(wèn)
1)讀
    $變量名稱(chēng)->成員屬性
    注意:成員屬性不要加$

2)寫(xiě)
    $變量名稱(chēng)->成員屬性=值



--對(duì)于類(lèi)成員方法的訪問(wèn)
    $變量名稱(chēng)->成員方法名稱(chēng)([參數(shù)]);

3.特殊的類(lèi)對(duì)象 $this
在類(lèi)中對(duì)類(lèi)的成員屬性和成員方法進(jìn)行訪問(wèn)

$this->成員屬性;
$this->成員方法();

4.構(gòu)造函數(shù)/構(gòu)造方法
構(gòu)造函數(shù)的函數(shù)名稱(chēng)是固定的
[訪問(wèn)修飾符]function __construct([參數(shù)]){
函數(shù)體
return/echo
}

--調(diào)用
當(dāng)類(lèi)被實(shí)例化時(shí),構(gòu)造函數(shù)會(huì)被自動(dòng)調(diào)用

--用途
用于初始化工作

5.析構(gòu)函數(shù)
方法名稱(chēng)特殊,已經(jīng)固定好的
function __destruct(){
函數(shù)體
}

--調(diào)用
類(lèi)對(duì)象被引用結(jié)束以后 自動(dòng)調(diào)用

--用途
清理:資源(內(nèi)存)回收

面向?qū)ο笕筇卣?br> 繼承 封裝 多態(tài)

1.封裝
應(yīng)用訪問(wèn)修飾符,對(duì)類(lèi)中的成員屬性和成員方法進(jìn)行封裝,使其形成一個(gè)獨(dú)立的運(yùn)行單位,盡可能隱藏類(lèi)中成員屬性和成員方法實(shí)現(xiàn)的細(xì)節(jié).

--訪問(wèn)修飾符
public 公共的
protected
private 私有的

2.魔術(shù)方法
--魔術(shù)方法的特點(diǎn)
所有的魔術(shù)方法,方法名稱(chēng)固定
所有的魔術(shù)方法,調(diào)用的機(jī)制是特殊的
有些魔術(shù)方法,有自己特殊的語(yǔ)法要求
所有的魔術(shù)方法,都有自己特殊的用途

__construct()
__destruct()

__get($name 在類(lèi)外訪問(wèn)非公有化的成員屬性的名字)
1.在類(lèi)外訪問(wèn)非公有化 成員屬性時(shí),魔術(shù)方法__get()會(huì)被自動(dòng)調(diào)用
2.魔術(shù)方法__get()要求必須有一個(gè)參數(shù)
3.用途:讀取非公有化成員屬性時(shí),應(yīng)用魔術(shù)方法__get()完成

__set($name,$value $name在類(lèi)外設(shè)置的非公有化成員屬性的名稱(chēng) $value 類(lèi)外的值)
    - 方法名稱(chēng)__set()
    - 在類(lèi)外給非公有化(public)成員屬性賦值時(shí).魔術(shù)方法__set()會(huì)被自動(dòng)調(diào)用.
    - 語(yǔ)法要求:需要兩個(gè)參數(shù).
    - 用途:給成員屬性設(shè)置值.

與面向?qū)ο笙嚓P(guān)的關(guān)鍵詞

1.const
功能:用于聲明常量
語(yǔ)法:常量名稱(chēng) = 常量值

常量名稱(chēng):
--常量名稱(chēng)盡量采用大寫(xiě)
--常量一經(jīng)定義不能改變(不能重復(fù)定義同一常量)

常量的訪問(wèn)
--類(lèi)外  類(lèi)名稱(chēng)::常量名稱(chēng)
--類(lèi)里  self::常量名稱(chēng)

2.static
功能:在類(lèi)中可以用于修飾類(lèi)中的成員屬性和成員方法

訪問(wèn)
--類(lèi)外 類(lèi)名稱(chēng)::靜態(tài)化成員屬性名稱(chēng)
--類(lèi)里 self::靜態(tài)化成員屬性名稱(chēng)


靜態(tài)化的成員方法的聲明
static functionsay(){
}
--類(lèi)外   類(lèi)名稱(chēng)::成員方法名稱(chēng)();
--類(lèi)里     self::成員方法名稱(chēng)();

注意:
在靜態(tài)化的成員方法中,不能訪問(wèn)非靜態(tài)化的成員屬性或者成員方法
(在靜態(tài)化的成員方法中,不能出現(xiàn)$this)

二.繼承
繼承是定義一個(gè)新的類(lèi),繼承先前定義類(lèi)中的成員方法和成員屬性,這個(gè)新的類(lèi)中也可以定義新的成員屬性和成員方法,從而實(shí)現(xiàn)類(lèi)的層級(jí)關(guān)系

先前定義的類(lèi):基類(lèi),父類(lèi)
新定義的類(lèi):派生類(lèi),子類(lèi)

PHP是單繼承
一個(gè)子類(lèi)只能有一個(gè)父類(lèi),一個(gè)父類(lèi)可以有多個(gè)子類(lèi)

--繼承語(yǔ)法
[修飾符] class 子類(lèi)名稱(chēng) extends 父類(lèi)名稱(chēng){}

--重載
在子類(lèi)中重新定義父類(lèi)中的成員方法

三.與面向?qū)ο笙嚓P(guān)的關(guān)鍵詞
const 常量名稱(chēng) = 常量值;
static 聲明靜態(tài)化的成員屬性和成員方法
訪問(wèn)成員屬性 類(lèi)名稱(chēng)::成員屬性 類(lèi)外
訪問(wèn)成員方法 類(lèi)名稱(chēng)::成員方法 類(lèi)外
成員屬性 self::成員屬性 類(lèi)里
成員方法 self::成員方法 類(lèi)里

final
 - 被final修飾的類(lèi)不能夠被繼承.
 - 被final修飾的成員方法不能夠被重載. 

instanceof
--功能:判斷一個(gè)類(lèi)對(duì)象是否屬于這個(gè)類(lèi)

三.鏈?zhǔn)綄?xiě)法

四.魔術(shù)方法(面試常問(wèn))
__construct()
__destruct()
__get()
__set()

__clone()
1.__clone()
2.特殊的調(diào)用時(shí)機(jī),在應(yīng)用關(guān)鍵詞clone時(shí),會(huì)被自動(dòng)調(diào)用.
3.魔術(shù)方法clone沒(méi)有特殊的語(yǔ)法要求.
4.用途:
- 給成員屬性賦初值.
- 單例模式.

--__isset()
在類(lèi)外應(yīng)用isset判斷類(lèi)中的非公有化成員屬性時(shí),魔術(shù)方法__isset()會(huì)被自動(dòng)調(diào)用
__isset()魔術(shù)方法需要有一個(gè)參數(shù).
-用途:用于判斷類(lèi)中的非公有化的成員屬性是否被設(shè)置了初值

--__unset() (!!!沒(méi)有返回值)
觸發(fā):在類(lèi)外應(yīng)用unset()刪除類(lèi)中非公有化的成員屬性時(shí),魔術(shù)方法__unset()會(huì)被自動(dòng)調(diào)用
必須要一個(gè)參數(shù)
用途:用于判斷非公有化成員屬性

--__autoload($classname)
觸發(fā):當(dāng)類(lèi)被實(shí)例化時(shí),會(huì)被自動(dòng)調(diào)用.
必須要一個(gè)參數(shù)
用途:類(lèi)的自動(dòng)加載
注:寫(xiě)在類(lèi)外

五.多態(tài)
有繼承關(guān)系的類(lèi)對(duì)象,對(duì)于相同的成員方法調(diào)用,產(chǎn)生不同的結(jié)果.
多態(tài)也稱(chēng)為:同名異式

語(yǔ)法:
--抽象方法和抽象類(lèi)
1.抽象方法
  抽象方法是沒(méi)有方法體的方法
  語(yǔ)法:
   abstract function 抽象方法名稱(chēng)(); 
2.抽象類(lèi)
  abstract class 抽象類(lèi)名稱(chēng){}

3.如果一個(gè)類(lèi)中含有抽象的成員方法,則這個(gè)類(lèi)必須被聲明為抽象類(lèi)

4.一個(gè)抽象類(lèi)中可以沒(méi)有抽象的成員方法,可以有普通的成員方法和成員屬性

5.抽象類(lèi)不能夠被實(shí)例化,抽象類(lèi)在項(xiàng)目中是用來(lái)聲明規(guī)范的.抽象類(lèi)僅僅能用來(lái)繼承,如果一個(gè)子類(lèi)繼承了抽象類(lèi),則必須重載抽象類(lèi)中的全部抽象方法.

6.子類(lèi)對(duì)于抽象類(lèi)的繼承,應(yīng)用關(guān)鍵詞extends

六.接口
1.接口是抽象類(lèi)的抽象類(lèi)
2.語(yǔ)法:interface 接口名稱(chēng){}
3.在接口中,只能有常量和抽象的成員方法
4.在接口中抽象的成員方法的聲明不能應(yīng)用關(guān)鍵詞abstract.
5.接口也不能被實(shí)例化,接口僅僅用來(lái)被繼承,接口是用來(lái)聲明規(guī)范
6.接口對(duì)于接口的繼承:extends
6.類(lèi)對(duì)于接口的繼承:implements
7.如果一個(gè)類(lèi)繼承了接口,則必須重載接口中的全部的抽象方法
8.一個(gè)子類(lèi)可以同時(shí)繼承父類(lèi)和接口.一個(gè)子類(lèi)可以繼承多個(gè)接口
class 子類(lèi)名稱(chēng) extends 父類(lèi)名稱(chēng)
implements 接口名稱(chēng)[,接口名稱(chēng)...]

get_class([object $object=null])
功能:獲取對(duì)象的類(lèi)名稱(chēng)
參數(shù):
object 要獲取類(lèi)名稱(chēng)的對(duì)象.
返回:類(lèi)名稱(chēng).

生成隨機(jī)值
uniqid([$prefix])

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子座哩,更是在濱河造成了極大的恐慌,老刑警劉巖嘁酿,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蕊苗,居然都是意外死亡筹陵,警方通過(guò)查閱死者的電腦和手機(jī)刽锤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)朦佩,“玉大人并思,你說(shuō)我怎么就攤上這事∮锍恚” “怎么了宋彼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵弄砍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我输涕,道長(zhǎng)音婶,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任莱坎,我火速辦了婚禮衣式,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘檐什。我一直安慰自己碴卧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布乃正。 她就那樣靜靜地躺著住册,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓮具。 梳的紋絲不亂的頭發(fā)上荧飞,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音名党,去河邊找鬼叹阔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛兑巾,可吹牛的內(nèi)容都是我干的条获。 我是一名探鬼主播忠荞,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蒋歌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了委煤?” 一聲冷哼從身側(cè)響起堂油,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碧绞,沒(méi)想到半個(gè)月后府框,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡讥邻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年迫靖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兴使。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡系宜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出发魄,到底是詐尸還是另有隱情盹牧,我是刑警寧澤俩垃,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站汰寓,受9級(jí)特大地震影響口柳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜有滑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一跃闹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧毛好,春花似錦辣卒、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至场靴,卻和暖如春啡莉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背旨剥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工咧欣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人轨帜。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓魄咕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蚌父。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哮兰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355