成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP面向?qū)ο?

seanlook / 2790人閱讀

摘要:面向?qū)ο竺嫦驅(qū)ο蠡A(chǔ)面向?qū)ο笫裁词穷惥哂邢嗤瑢傩蕴卣骱头椒ㄐ袨榈囊幌盗袀€(gè)體的集合,類是一個(gè)抽象的概念。析構(gòu)函數(shù),當(dāng)一個(gè)對(duì)象被銷毀前,自動(dòng)調(diào)用。作用是為新克隆的對(duì)象進(jìn)行初始化賦值對(duì)象序列化時(shí),自動(dòng)調(diào)用。使用抽象類的作用限制實(shí)例化。

面向?qū)ο?/b> 面向?qū)ο蠡A(chǔ) 面向?qū)ο?/b> 什么是類?

具有相同屬性(特征)和方法(行為)的一系列個(gè)體的集合,類是一個(gè)抽象的概念。

什么是對(duì)象?

從類中,拿到的具有具體屬性值的個(gè)體,稱為對(duì)象。對(duì)象是一個(gè)具體的個(gè)體。
eg:人類;張三

類和對(duì)象的關(guān)系?

類是對(duì)象的抽象化!對(duì)象是類的具體化!

類僅僅表明這類對(duì)象有哪些屬性,但是不能有具體的值,所以類是抽象的。

對(duì)象是將類的所有屬性賦值后,產(chǎn)生具體的個(gè)體,所有對(duì)象是具體的。

類的聲明與實(shí)例化 如何聲明一個(gè)類:
class 類名{
    訪問修飾符 $屬性[=默認(rèn)值];
    [訪問修飾符] function 方法(){}
}
class SimpleClass {
    // property declaration
    public $var = "a default value";

    // method declaration
    public function displayVar() {
        echo $this->var;
    }
}
聲明一個(gè)類的注意事項(xiàng):

類名只能有字母數(shù)字下劃線組成,開頭不能是數(shù)字,必須符合大駝峰法則;

類名必須使用class修飾,類名后面一定不能有();

屬性必須要帶訪問修飾符,方法可以不帶訪問修飾符。

實(shí)例化對(duì)象及對(duì)象屬性方法的調(diào)用:

$對(duì)象名 = new 類名(); //()可以不帶

類外部調(diào)用屬性和方法:

$對(duì)象名 -> $屬性名; //使用->調(diào)用屬性時(shí),屬性名不能帶$符號(hào)

類內(nèi)部調(diào)用屬性和方法:

$this -> $屬性名;

構(gòu)造函數(shù) 什么是構(gòu)造函數(shù)?

構(gòu)造函數(shù)是類中的一個(gè)特殊函數(shù),當(dāng)我們使用new關(guān)鍵字實(shí)例化對(duì)象時(shí),相當(dāng)于調(diào)用了類的構(gòu)造函數(shù)。

構(gòu)造函數(shù)有什么作用?

實(shí)例化對(duì)象時(shí),自動(dòng)調(diào)用,用于給對(duì)象的屬性賦初值!

構(gòu)造函數(shù)的寫法:

構(gòu)造函數(shù)名,必須與類同名(廢棄)

[public] function Person($name){
    $this -> name = $name;
}

使用魔術(shù)方法__construct

[public] function __construct($name){
    $this -> name = $name;
}
構(gòu)造函數(shù)注意事項(xiàng):

第一種寫法,構(gòu)造函數(shù)名必須與類同名?。。。?/p>

如果一個(gè)類沒有手寫構(gòu)造函數(shù),則系統(tǒng)默認(rèn)會(huì)有一個(gè)空參構(gòu)造,因此可以使用new Person();

如果我們寫了帶參數(shù)的構(gòu)造函數(shù),則將不會(huì)再有空參構(gòu)造,也就是不能直接使用new Person();

Person后面的()中的參數(shù)列表,必須符合構(gòu)造函數(shù)的要求?。。。?/p>

如果兩種構(gòu)造函數(shù)同時(shí)存在,將使用__construct

析構(gòu)函數(shù):__destruct():

析構(gòu)函數(shù)在對(duì)象被銷毀釋放之前自動(dòng)調(diào)用;

析構(gòu)函數(shù)不能帶有任何的參數(shù);

析構(gòu)函數(shù)常用于對(duì)象使用完以后,釋放資源,關(guān)閉資源等。

魔術(shù)方法:

PHP中,給我們提供一系列用__開頭的函數(shù),這些函數(shù)無需自己手動(dòng)調(diào)用,
會(huì)在合適的時(shí)機(jī)自動(dòng)調(diào)用,這類函數(shù)稱為魔術(shù)稱為魔術(shù)函數(shù)。
eg:function __construct(){} 在類new一個(gè)對(duì)象時(shí)自動(dòng)調(diào)用
function __destruct(){} 在對(duì)象被銷毀時(shí)自動(dòng)調(diào)用,我們要求,除了魔術(shù)方法之外,自定義的函數(shù)與方法不能使用__開頭。最后,一般對(duì)于功能比較復(fù)雜的類,我們會(huì)多帶帶的寫到一個(gè)類文件中。類文件的命名,同一小寫,使用"類名小寫.class.php"的方式命名。在其他文件中使用這個(gè)類時(shí),可以使用include導(dǎo)入這個(gè)".class.php"文件。

封裝和繼承 什么是封裝?

通過訪問修飾符,將類中不需要外部訪問的屬性和方法進(jìn)行私有化處理,以實(shí)現(xiàn)訪問控制。

注意:是實(shí)現(xiàn)訪問控制,而不是拒絕訪問。也就是說,我們私有化屬性后,需要提供對(duì)應(yīng)的方法,讓用戶通過我們提供的方法處理屬性。
封裝的作用?

使用者只關(guān)心類能夠提供的功能,不關(guān)心功能實(shí)現(xiàn)的細(xì)節(jié)?。ǚ庋b方法)

對(duì)用戶的數(shù)據(jù)進(jìn)行控制,防止設(shè)置不合法數(shù)據(jù),控制返回給用戶的數(shù)據(jù)(屬性封裝+set/get方法)

實(shí)現(xiàn)封裝操作? 方法的封裝

對(duì)于一些只在類內(nèi)部使用的方法,而不像對(duì)外部提供使用,那么,這樣的方法我們可以使用private進(jìn)行私有化處理。

private function formatName(){} //這個(gè)方法僅僅能在類內(nèi)部使用$this調(diào)用
function showName(){
    $this->formatName();
}
屬性的封裝+set/get方法

為了控制屬性的設(shè)置以及讀取,可以將屬性進(jìn)行私有化處理,并要求用戶通過我們提供的set/get方法進(jìn)行設(shè)置

private $age;
//set方法
function setAge($age){
    $this->age=$age;
} 
//get方法
function getAge(){
     return $this->age;
}
$對(duì)象->getAge();
$對(duì)象->setAge(12);
屬性的封裝+魔術(shù)方法
__get( -> __set(, ->= }
$對(duì)象->age; //訪問對(duì)象私有屬性時(shí),自動(dòng)調(diào)用__get()魔術(shù)方法,并且將訪問的屬性名傳給__get()方法;
$對(duì)象->age=12; //設(shè)置對(duì)象私有屬性時(shí),自動(dòng)調(diào)用__set()魔術(shù)方法,并且將設(shè)置的屬性名以及屬性值傳給__set()方法;
注意:在魔術(shù)方法中,可以使用分支結(jié)構(gòu),判斷$key的不同,進(jìn)行不同操作。
關(guān)于封裝的魔術(shù)方法:

__set($key,$value):給類私有屬性賦值時(shí)自動(dòng)調(diào)用,調(diào)用時(shí)給方法傳遞兩個(gè)參數(shù):需要設(shè)置的屬性名,屬性值。

__get($key,$value):讀取類私有屬性時(shí)自動(dòng)調(diào)用,調(diào)用時(shí)給方法傳遞一個(gè)參數(shù),需要讀取的屬性名;

__isset($key):外部使用isset()函數(shù)檢測(cè)私有屬性時(shí),自動(dòng)調(diào)用。

類外部使用isset();檢測(cè)私有屬性,默認(rèn)是檢測(cè)不到的。false
所以,我們可以使用__isset();函數(shù),在自動(dòng)調(diào)用時(shí),返回內(nèi)部檢測(cè)結(jié)果。

function __isset($key){return isset($this -> $key);}

當(dāng)外部使用isset($對(duì)象名->私有屬性);檢測(cè)時(shí),將自動(dòng)調(diào)用上述__isset()返回的結(jié)果!

__unset($key):外部使用unset()函數(shù)刪除私有屬性時(shí),自動(dòng)調(diào)用;

function __unset($key){unset($this -> $key);}

當(dāng)外部使用unset($對(duì)象名->私有屬性);刪除屬性時(shí),自動(dòng)將屬性名傳給__unset(),并交由這個(gè)魔術(shù)方法處理。
繼承的基礎(chǔ)知識(shí): 如何實(shí)現(xiàn)繼承?

給子類使用extends關(guān)鍵字,讓子類繼承父類;

class Student extends Person{}
現(xiàn)繼承的注意事項(xiàng)?

子類只能繼承父類的非私有屬性。

子類繼承父類后,相當(dāng)于將父類的屬性和方法copy到子類,可以直接使用$this調(diào)用。

PHP只能單繼承,不支持一個(gè)類繼承多個(gè)類。但是一個(gè)類進(jìn)行多層繼承。

class Person{}
class Adult extends Person{}
class Student extends Adult{} 
//Student 類就同時(shí)具有了Adult類和Person類的屬性和方法
方法覆蓋(方法重寫)

子類繼承父類

子類重寫父類已有方法

符合上述兩個(gè)條件,稱為方法覆蓋。覆蓋之后,子類調(diào)用方法,將調(diào)用子類自己的方法。
同樣,除了方法覆蓋,子類也可以具有與父類同名的屬性,進(jìn)行屬性覆蓋。

如果,子類重寫了父類方法,如何在子類中調(diào)用父類同名方法?

partent::方法名();
所以,當(dāng)子類繼承父類時(shí),需在子類的構(gòu)造中的第一步,首先調(diào)用父類構(gòu)造進(jìn)行復(fù)制。

function __construct($name,$sex,$school){
    partent::__construct($name,$sex);
    $this -> school = $school;
}
PHP關(guān)鍵字 final

final修飾類,此類為最終類,不能被繼承!

final修飾方法,此方法為最終方法,不能被重寫!

final不能修飾屬性。

static

可以修飾屬性和方法,分別稱為靜態(tài)屬性和靜態(tài)方法,也叫類屬性,類方法;

靜態(tài)屬性,靜態(tài)方法,只能使用類名直接調(diào)用。

使用"類名::$靜態(tài)屬性" , "類名::靜態(tài)方法()"
Person::$sex; Person::say();

靜態(tài)屬性和方法,在類裝載時(shí)就會(huì)聲明,先于對(duì)象產(chǎn)生。

靜態(tài)方法中,不能調(diào)用非靜態(tài)屬性或方法;

非靜態(tài)方法,可以調(diào)用靜態(tài)屬性和方法。 (因?yàn)殪o態(tài)屬性和方法在類裝載時(shí)已經(jīng)產(chǎn)生,而非靜態(tài)的屬性方法,此時(shí)還沒有實(shí)例化誕生)

在類中,可以使用self關(guān)鍵字,代指本類名。

class Person{
    static $sex = "nan";
    function say(){
        echo self::$sex;
    }
}

靜態(tài)屬性是共享的,也就是new出很多對(duì)象,也是共用一個(gè)屬性。

const關(guān)鍵字:

在類中聲明常量,不能是define()函數(shù)!必須使用const關(guān)鍵字。與define()聲明相似,const關(guān)鍵字聲明常量不能帶$,必須全部大寫!
常量一旦聲明,不能改變。調(diào)用時(shí)與static一樣,使用類名調(diào)用Person::常量。

instanceof操作符:

檢測(cè)一個(gè)對(duì)象,是否是某一個(gè)類的實(shí)例。(包括爹輩,爺爺輩,太爺爺輩……)

$zhangsan instanceof Person;

【小總結(jié)】幾種特殊操作符:

. 只能連接字符串; "".""

=> 聲明數(shù)組時(shí),關(guān)聯(lián)鍵與值["key"=>"value"]

-> 對(duì)象($this new出的對(duì)象)調(diào)用成員屬性,成員方法;

:: 使用parent關(guān)鍵字,調(diào)用父類中的同名方法:parent::say();,使用類名(和self)調(diào)用類中的靜態(tài)屬性,靜態(tài)方法,以及常量。

魔術(shù)方法小總結(jié)

__construct():構(gòu)造函數(shù),new一個(gè)對(duì)象時(shí),自動(dòng)調(diào)用。

__destruct():析構(gòu)函數(shù),當(dāng)一個(gè)對(duì)象被銷毀前,自動(dòng)調(diào)用。

__get():訪問類中私有屬性時(shí),自動(dòng)調(diào)用。傳遞讀取的屬性名,返回$this->屬性名

__set():給類的私有屬性賦值時(shí),自動(dòng)調(diào)用。傳遞需要設(shè)置的屬性名和屬性值;

__isset():使用isset()檢測(cè)對(duì)象私有屬性時(shí),自動(dòng)調(diào)用。傳遞檢測(cè)的屬性名,返回isset($this -> 屬性名);

__unset():使用unset()刪除對(duì)象私有屬性時(shí),自動(dòng)調(diào)用。傳遞刪除的屬性名,方法中執(zhí)行unset($this -> 屬性名);

__toString():使用echo打印對(duì)象時(shí),自動(dòng)調(diào)用。返回想要在打印對(duì)象時(shí),顯示的內(nèi)容;返回必須是字符串;

__call():調(diào)用一個(gè)類中未定義或未公開的方法時(shí),自動(dòng)調(diào)用。傳遞被調(diào)用的函數(shù)名,和參數(shù)列表數(shù)組;

__clone():當(dāng)使用clone關(guān)鍵字,克隆一個(gè)對(duì)象時(shí),自動(dòng)調(diào)用。作用是為新克隆的對(duì)象進(jìn)行初始化賦值;

__sleep():對(duì)象序列化時(shí),自動(dòng)調(diào)用。返回一個(gè)數(shù)組,數(shù)組中的值就是可以序列化的屬性;

__wakeup():對(duì)象反序列化時(shí),自動(dòng)調(diào)用。為反序列化新產(chǎn)生的對(duì)象,進(jìn)行初始化賦值;

__autoload():需要在類外部聲明函數(shù)。當(dāng)實(shí)例化一個(gè)未聲明的類時(shí),自動(dòng)調(diào)用。傳遞實(shí)例化的類名,可以使用類名自動(dòng)加載對(duì)應(yīng)的類文件。

抽象類和抽象方法

什么是抽象方法?

沒有方法體{}的方法,必須使用abstract關(guān)鍵字修飾。這樣的方法,我們稱為抽象方法。

abstract function say(); //抽象方法
什么是抽象類?

使用abstract關(guān)鍵字修飾的類就是抽象類。

abstract class Person{}
抽象類的注意事項(xiàng):

抽象類可以包含非抽象方法;

包含抽象方法的類必須是抽象類,抽象類并不一定必須包含抽象方法;

抽象類,不能實(shí)例化。(抽象類中可能包含抽象方法,抽象方法沒有方法體,實(shí)例化調(diào)用沒有意義)

我們使用抽象類的目的,就是限制實(shí)例化?。?!

子類繼承抽象類,那么子類必須重寫父類的所有抽象方法,除非,子類也是抽象類。

使用抽象類的作用?

限制實(shí)例化。(抽象類是一個(gè)不完整的類,里面的抽象方法沒有方法體,所以不能實(shí)例化)

抽象類為子類的繼承提供一種規(guī)范,子類繼承一個(gè)抽象類,則必須包含并且實(shí)現(xiàn)抽象類中已定的抽象方法。

接口與多態(tài) 接口 什么是接口?

接口是一種規(guī)范,提供了一組實(shí)現(xiàn)接口的類所必須實(shí)現(xiàn)的方法組合。
接口使用interface關(guān)鍵字聲明;

interface Inter{}

接口中的所有方法,必須都是抽象方法。

接口中的抽象方法不需要也不能使用abstract修飾。

接口中不能聲明變量,不能有屬性,只能使用常量?。?!

接口可以繼承接口,使用extends關(guān)鍵字!

接口使用extends繼承接口,可以實(shí)現(xiàn)多繼承。

interface int1 extends Inter,Inter2{}
類可以實(shí)現(xiàn)接口,使用implements關(guān)鍵字!

類使用implements實(shí)現(xiàn)接口,可同時(shí)實(shí)現(xiàn)多個(gè)接口,多個(gè)接口間逗號(hào)分隔;

abstract class Person implements Inter,Inter2{}

一個(gè)類實(shí)現(xiàn)一個(gè)或多個(gè)接口,那么這個(gè)類,必須實(shí)現(xiàn)所有接口中的所有抽象方法!
除非,這個(gè)類是抽象類。

接口&&抽象類區(qū)別

聲明方式上,接口使用interface關(guān)鍵字,抽象類使用abstract class。

實(shí)現(xiàn)/繼承方式上,一個(gè)類使用extends繼承抽象類,使用implements實(shí)現(xiàn)接口。

抽象類只能單繼承,接口可以多實(shí)現(xiàn)。(接口extends接口)、多實(shí)現(xiàn)(類implements接口)

抽象類中可以有非抽象方法,接口中只能有抽象方法,不能有費(fèi)抽象方法。抽象類中的抽象方法必須使用abstract關(guān)鍵字修飾,接口中抽象方法不能帶修飾詞。

抽象類是個(gè)類,可以有屬性、變量;接口中只能有常量。

多態(tài) 多態(tài)
一個(gè)類,被多個(gè)子類繼承。

如果,這個(gè)類的某個(gè)方法,在多個(gè)子類中,表現(xiàn)出不同的功能,我們稱這種行為為多態(tài)。

實(shí)現(xiàn)多態(tài)的必要途徑:

子類繼承父類;

子類重寫父類方法;

父類引用指向子類對(duì)象

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28489.html

相關(guān)文章

  • PHP面試之面向對(duì)象(1)

    摘要:二面向?qū)ο笥惺裁刺卣髅嫦驅(qū)ο蟮闹饕卣饔谐橄罄^承封裝和多態(tài)。析構(gòu)函數(shù)析構(gòu)函數(shù)是在引入的,它的作用與調(diào)用時(shí)機(jī)和構(gòu)造函數(shù)剛好相反,它在對(duì)象被銷毀時(shí)自動(dòng)執(zhí)行。 PHP面試專欄正式起更,每周一、三、五更新,提供最好最優(yōu)質(zhì)的PHP面試內(nèi)容。PHP中面向?qū)ο蟪?嫉闹R(shí)點(diǎn)有以下7點(diǎn),我將會(huì)從以下幾點(diǎn)進(jìn)行詳細(xì)介紹說明,幫助你更好的應(yīng)對(duì)PHP面試??嫉拿嫦?qū)ο笙嚓P(guān)的知識(shí)點(diǎn)和考題。整個(gè)面向?qū)ο笪恼碌慕Y(jié)構(gòu)涉...

    phodal 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來。注意中,對(duì)象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    李昌杰 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來。注意中,對(duì)象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    Lyux 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來。注意中,對(duì)象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    AaronYuan 評(píng)論0 收藏0
  • PHP面試??純?nèi)容之面向對(duì)象(3)

    摘要:面試專欄正式起更,每周一三五更新,提供最好最優(yōu)質(zhì)的面試內(nèi)容。繼上一篇面試??純?nèi)容之面向?qū)ο蟀l(fā)表后,今天更新面向?qū)ο蟮淖詈笠黄?。面向?qū)ο蟮闹饕卣鳛榉庋b繼承多態(tài)。為了提高內(nèi)聚性減少引起變化,單一原則是低耦合高內(nèi)聚的面向原則上的引申。 PHP面試專欄正式起更,每周一、三、五更新,提供最好最優(yōu)質(zhì)的PHP面試內(nèi)容。繼上一篇PHP面試??純?nèi)容之面向?qū)ο螅?)發(fā)表后,今天更新面向?qū)ο蟮淖詈笠黄?...

    xfee 評(píng)論0 收藏0
  • PHP面向對(duì)象編程:面向對(duì)象概念、基本實(shí)踐、高級(jí)實(shí)戰(zhàn)、PHP面向對(duì)象特殊實(shí)踐

    摘要:一面向?qū)ο蟮母拍钍裁词敲嫦驅(qū)ο笫篱g萬物皆對(duì)象,抽象的也是對(duì)象,一切可見或不可見都是對(duì)象對(duì)象的基本組成對(duì)象包含兩個(gè)部分對(duì)象的組成元素是對(duì)象的數(shù)據(jù)模型,用于描述對(duì)象的數(shù)據(jù)又稱為對(duì)象的屬性,或者對(duì)象的成員變量對(duì)象的行為是對(duì)象的行為模型,用于描述對(duì) 一、面向?qū)ο蟮母拍?1.1 什么是面向?qū)ο?object oriented) ?????世間萬物皆對(duì)象,抽象的也是對(duì)象,一切可見或不可見都是對(duì)象 ...

    worldligang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

seanlook

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<