摘要:前言自從進(jìn)入版本以來(lái),開(kāi)始全面地支持面向?qū)ο缶幊獭:昧耍M(jìn)入正題,面向?qū)ο蟮娜筇匦苑謩e是封裝性,繼承性以及多態(tài)性,使用面向?qū)ο箝_(kāi)發(fā),讓我們的程序可維護(hù)以及擴(kuò)展性大大提高。
前言
自從php進(jìn)入5.0版本以來(lái),PHP開(kāi)始全面地支持面向?qū)ο缶幊獭`牛l(shuí)說(shuō)php很low。我們專(zhuān)注web開(kāi)發(fā)好不好;誰(shuí)說(shuō)php代碼爛,自己水平不行寫(xiě)的代碼當(dāng)然爛了;誰(shuí)說(shuō)php框架不優(yōu)雅的,你用過(guò)laravel嗎。好了,進(jìn)入正題,面向?qū)ο蟮娜筇匦苑謩e是封裝性,繼承性以及多態(tài)性,使用面向?qū)ο箝_(kāi)發(fā),讓我們的程序可維護(hù)以及擴(kuò)展性大大提高。
基本知識(shí)類(lèi):具有相同屬性或方法的一類(lèi)集合體。比如雪佛蘭汽車(chē)是一個(gè)雪佛蘭汽車(chē)類(lèi),奔馳汽車(chē)是一個(gè)奔馳汽車(chē)類(lèi),寶馬汽車(chē)是一個(gè)寶馬汽車(chē)類(lèi),而這三個(gè)類(lèi)又是汽車(chē)大類(lèi)的子類(lèi)。
對(duì)象:類(lèi)的一個(gè)具體實(shí)現(xiàn),比如寶馬Q5就是寶馬汽車(chē)類(lèi)的一個(gè)具體實(shí)現(xiàn)。對(duì)象地使用是放在內(nèi)存中的。一下讓我們了解一下對(duì)象在內(nèi)存中的分配
使用面向?qū)ο螅褪庆`活地使用以上兩個(gè)知識(shí)點(diǎn)。讓我們來(lái)創(chuàng)建和使用類(lèi)與對(duì)象
a="opt";//將opt對(duì)象中的a屬性賦值為opt $opt->funA();//打印出"I am function A" ?>
修飾符:在定義類(lèi)與類(lèi)中的屬性時(shí),我們可以使用如下三個(gè)修飾符,若不加,則默認(rèn)為public
public:權(quán)限最大
protected:權(quán)限范圍在其本身與其子類(lèi)
private:權(quán)限范圍僅在其本身
構(gòu)造函數(shù)與析構(gòu)函數(shù):在我們對(duì)類(lèi)實(shí)例化創(chuàng)建對(duì)象時(shí),往往需要對(duì)對(duì)象進(jìn)行初始化,這時(shí),我們就需要在類(lèi)中定義一個(gè)構(gòu)造方法。當(dāng)我們使用完對(duì)象時(shí),就需要釋放對(duì)象,以減少內(nèi)存的使用,這時(shí)我們就需要使用析構(gòu)方法。
在php中我們使用__construct()方法與__destruct(),如下代碼
a=$a; $this->b=$b; echo "我是構(gòu)造函數(shù)"; } public function __destruct(){ echo "我是析構(gòu)函數(shù)"; } } ?>封裝性
當(dāng)我們開(kāi)發(fā)一些重要的程序模塊時(shí),常常不希望別人能輕易訪(fǎng)問(wèn)這些程序模塊的數(shù)據(jù),因此需要對(duì)這些數(shù)據(jù)進(jìn)行封裝。這時(shí)我們要進(jìn)行數(shù)據(jù)的訪(fǎng)問(wèn)控制,常常使用private關(guān)鍵字來(lái)對(duì)這些屬性與方法進(jìn)行封裝。
如下
這樣,當(dāng)我們創(chuàng)建對(duì)象時(shí)就不能調(diào)用私有的屬性與方法。但是我們可以通過(guò)使用魔術(shù)方法來(lái)對(duì)這些私有屬性與方法進(jìn)行訪(fǎng)問(wèn)。
__set()與__get()的使用
通過(guò)__set()方法我們可以通過(guò)對(duì)象直接設(shè)置成員屬性值
通過(guò)__get()方法我們可以通過(guò)對(duì)象直接獲取成員屬性值
$oldValue=$newvalue; } public function __get($newvalue){ return $newvalue; } } $opt= new setClass(); $opt->a="sss";//直接設(shè)置私有屬性值 echo $opt->b;//直接讀取私有屬性值 ?>
__isset()與__unset()的使用
通過(guò)__isset()直接查看對(duì)象中私有屬性是否存在
通過(guò)__unset()直接刪除對(duì)象中的私有屬性
$b); var_dump(unset($opt->$b)); ?>繼承性
當(dāng)我們編寫(xiě)多個(gè)類(lèi)時(shí),常常多個(gè)類(lèi)具有相同的屬性與方法,為了簡(jiǎn)化代碼我們引入了繼承的概念,子類(lèi)可以繼承父類(lèi)的一些屬性與方法,減少了冗余代碼地編寫(xiě)。
如何編寫(xiě)繼承類(lèi)
我們使用關(guān)鍵字extends來(lái)編寫(xiě)子類(lèi)
如上,childClass是parentClass的子類(lèi),php僅支持單繼承,即一個(gè)子類(lèi)只有一個(gè)父類(lèi),但父類(lèi)可以有多個(gè)子類(lèi)。
重寫(xiě)父類(lèi)方法
當(dāng)父類(lèi)中的方法不能滿(mǎn)足子類(lèi)的使用時(shí)我們可以重寫(xiě)父類(lèi)方法。但當(dāng)我們又想在子類(lèi)使用父類(lèi)的方法時(shí),我們可以使用如下語(yǔ)法:parent::方法名
幾個(gè)重要的關(guān)鍵字
3.1 final
final可以修飾類(lèi)與方法,不能修飾成員屬性; 被final修飾的類(lèi)不能繼承,而用final修飾的方法在子類(lèi)中不能被重寫(xiě)
3.2 static
static可以修飾成員屬性與成員方法,不能修飾類(lèi); 使用static修飾的成員與方法可以通過(guò)類(lèi)直接使用,使用如下語(yǔ)法:類(lèi)名::$屬性名或方法名(); 在類(lèi)中使用時(shí)通過(guò)如下語(yǔ)法:self::$屬性名或方法名.
3.3 const
在類(lèi)中聲明常量使用const,而不是使用define(); 比如 const TT=90 當(dāng)使用常量時(shí)直接使用如下語(yǔ)法self::常量名
3.4 instanceof
使用該關(guān)鍵字可以檢測(cè)某個(gè)實(shí)例是否是某個(gè)類(lèi)的實(shí)例。
3.5 trait
php只能進(jìn)行單繼承,但它同時(shí)提供了另類(lèi)方式來(lái)進(jìn)行代碼復(fù)用,解決單繼承問(wèn)題。 如下 ``` ```抽象技術(shù)
用abstract關(guān)鍵字修飾的方法與類(lèi)稱(chēng)為抽象方法或抽象類(lèi)。
聲明抽象類(lèi)與抽象方法
抽象技術(shù)為子類(lèi)的聲明提供了一種規(guī)范,限制了類(lèi)的實(shí)例化(抽象類(lèi)不能實(shí)例化)。
接口技術(shù)接口是一種特殊的抽象類(lèi),接口中只能聲明抽象類(lèi)與常量
聲明接口使用interface,實(shí)現(xiàn)接口使用implements,修飾符只能是默認(rèn)的public;
一個(gè)子類(lèi)可以繼承多個(gè)接口,同時(shí)繼承一個(gè)父類(lèi)
在php中多態(tài)地實(shí)現(xiàn)需要一個(gè)類(lèi)通過(guò)多個(gè)子類(lèi)地繼承實(shí)現(xiàn),如果一個(gè)類(lèi)的方法在多個(gè)子類(lèi)中重寫(xiě)并實(shí)現(xiàn)不同的功能,我們稱(chēng)之為多態(tài)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/26171.html
摘要:我們目前正處于一個(gè)新興的區(qū)塊鏈開(kāi)發(fā)行業(yè)中。,一種在以太坊開(kāi)發(fā)人員中流行的新的簡(jiǎn)單編程語(yǔ)言,因?yàn)樗怯糜陂_(kāi)發(fā)以太坊智能合約的語(yǔ)言。它是全球至少萬(wàn)開(kāi)發(fā)人員使用的世界上最流行的編程語(yǔ)言之一。以太坊,主要是針對(duì)工程師使用進(jìn)行區(qū)塊鏈以太坊開(kāi)發(fā)的詳解。 我們目前正處于一個(gè)新興的區(qū)塊鏈開(kāi)發(fā)行業(yè)中。區(qū)塊鏈技術(shù)處于初期階段,然而這種顛覆性技術(shù)已經(jīng)成功地風(fēng)靡全球,并且最近經(jīng)歷了一場(chǎng)與眾不同的繁榮。由于許多...
摘要:本文將會(huì)介紹自起,直至中增加的新特征。棄用的功能以下幾個(gè)功能被棄用,若在配置文件中啟用,則會(huì)在運(yùn)行時(shí)發(fā)出警告。該類(lèi)的完整限定名是其中第一個(gè)反斜杠表示全局命名空間。目的在于模仿的不對(duì),目的是為了讓發(fā)布應(yīng)用程序更加方便。 截至目前(2014.2), PHP 的最新穩(wěn)定版本是 PHP5.5, 但有差不多一半的用戶(hù)仍在使用已經(jīng)不在維護(hù) [注] 的 PHP5.2, 其余的一半用戶(hù)在使用 PHP5...
摘要:很多情況下,通常一個(gè)人類(lèi),即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類(lèi)是相似對(duì)象的描述,稱(chēng)為類(lèi)的定義,是該類(lèi)對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類(lèi)的實(shí)體化形成的對(duì)象。一類(lèi)的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類(lèi)的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個(gè)人類(lèi),即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類(lèi)是相似對(duì)象的描述,稱(chēng)為類(lèi)的定義,是該類(lèi)對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類(lèi)的實(shí)體化形成的對(duì)象。一類(lèi)的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類(lèi)的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個(gè)人類(lèi),即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類(lèi)是相似對(duì)象的描述,稱(chēng)為類(lèi)的定義,是該類(lèi)對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類(lèi)的實(shí)體化形成的對(duì)象。一類(lèi)的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類(lèi)的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
閱讀 4307·2021-10-13 09:39
閱讀 485·2021-09-06 15:02
閱讀 3232·2019-08-30 15:53
閱讀 1043·2019-08-30 13:04
閱讀 2046·2019-08-30 11:27
閱讀 2017·2019-08-26 13:51
閱讀 2100·2019-08-26 11:33
閱讀 2907·2019-08-26 10:36