中字幕视频在线永久在线,最新免费av在线观看,最近免费mv在线观看,亚洲乱码一区av春药高潮,专区,国产激情毛片,国产成人

IT培訓(xùn)-高端面授IT培訓(xùn)機(jī)構(gòu)
云和教育:云和數(shù)據(jù)集團(tuán)高端IT職業(yè)教育品牌
  • 國(guó)家級(jí)
    全民數(shù)字素養(yǎng)與技能培訓(xùn)基地
  • 河南省
    第一批產(chǎn)教融合型企業(yè)建設(shè)培育單位
  • 鄭州市
    數(shù)字技能人才(碼農(nóng))培養(yǎng)評(píng)價(jià)聯(lián)盟

【技術(shù)】深入探討PHP類(lèi)的封裝與繼承

  • 發(fā)布時(shí)間:
    2015-12-09
  • 版權(quán)所有:
    云和教育
  • 分享:

類(lèi)是面向?qū)ο笾械闹匾拍?,而封裝和繼承是面向?qū)ο蟮闹匾攸c(diǎn)。這篇文章和大家重點(diǎn)討論一下封裝、繼承這兩個(gè)特點(diǎn),給出一些例子,供大家學(xué)習(xí)參考。

封裝

把成員方法和成員屬性封裝到類(lèi)中,隱藏屬性和方法實(shí)現(xiàn)的細(xì)節(jié),通過(guò)public、protected、private等限定類(lèi)成員的訪問(wèn)權(quán)限,數(shù)據(jù)被保護(hù)在內(nèi)部,只通過(guò)被授權(quán)的成員方法才可以操作,盡可能的對(duì)成員進(jìn)行封裝。

public:方法或者屬性在任何作用域下都可以訪問(wèn)到,而且是默認(rèn)的,如果沒(méi)有為一個(gè)屬性或方法指定訪問(wèn)修飾符,它將是public。

protected:本類(lèi)和子類(lèi)可以訪問(wèn),外部對(duì)象不可以調(diào)用。

private:只能在本類(lèi)訪問(wèn),子類(lèi)與外部對(duì)象都不可能調(diào)用。經(jīng)過(guò)private標(biāo)記的方法或者屬性可以在繼承類(lèi)中重新定義,每一個(gè)類(lèi)只能看到它自己定義的私有方法。

這三個(gè)修飾符從作用范圍上來(lái)講應(yīng)該像這樣從大到小排序:public→protected→private之所以說(shuō)是在作用范圍上,是因?yàn)轭?lèi)把一些屬性和方法進(jìn)行了封裝,這個(gè)封裝就決定了數(shù)據(jù)的“可見(jiàn)性”,這樣我們?cè)陬?lèi)的外面不能夠隨意修改所定義的屬性和方法而只能夠進(jìn)行調(diào)用,這就是封裝的好處,同時(shí)也提高了安全性。

我們給出代碼示例:

class myClass{

public $public=”Public”; ? ? ? ? ? ? //public屬性

protected $protected=”Protected”; ? ?//protected屬性

private $private=”Private”; ? ? ? ? ?//private 屬性

function say_Hello() { ? ? ? ? ? ? ? //public屬性

//只是舉例說(shuō)明,自行添加內(nèi)容

}

$obj=new myClass();

echo $obj->public;

//echo $obj->protected;

//echo $obj->private;

通過(guò)運(yùn)行以上示例我們得到一個(gè)“Public”,但當(dāng)你把//echo $obj->private;的注釋去掉時(shí),你會(huì)得到一下如下的錯(cuò)誤:Fatal error: Cannot access protected property myClass::$protected in E:apachehtdocsexamplefile.php on line 13。可以看到我們不能隨意去訪問(wèn)類(lèi)的屬性定義,我們?cè)凇巴饷妗笔遣恢肋@個(gè)類(lèi)中到底有那些成員,因?yàn)檫@些成員對(duì)于其他的類(lèi)可能是不可見(jiàn)的。當(dāng)然如果我們一定要訪問(wèn)或者修改定義為“私有”的屬性時(shí),也可以使用PHP所提供的系統(tǒng)方法:_get()和_set()。

繼承

可以使一個(gè)類(lèi)繼承并擁有另一個(gè)已經(jīng)存在類(lèi)的成員屬性和方法,被繼承的類(lèi)稱(chēng)為父類(lèi)或基類(lèi),繼承類(lèi)為子類(lèi)。通過(guò)extends關(guān)鍵字實(shí)現(xiàn)繼承關(guān)系。通俗來(lái)說(shuō),要有繼承就得有一個(gè)“根源”,這“根源”你可能想像你以后生了兒子或者女兒,他們會(huì)從你這里得到一些“東西(屬性和方法)”,這樣你的“后代”就是持有你(根源)所有的一些特征了。

產(chǎn)生“根源”類(lèi)(父類(lèi)或者基類(lèi))

語(yǔ)法:class father{

}

產(chǎn)生“后代”(子類(lèi))

語(yǔ)法:class son extends father{

}

PHP extends類(lèi)繼承示例代碼:

class father{

protected $name;

function __construct($name){ ? ? //構(gòu)造函數(shù)

$this->name=$name;

}

function work(){

echo “{$this->name}我在工作;

}

function __destruct(){} ? ? ?//析構(gòu)函數(shù)

}

class son extends father{ ? ? ?//繼承父類(lèi)

function play(){

echo “{$this->name}我在玩游戲;

}

}

$my_father=new father(“爸爸”); ? ? //創(chuàng)建父類(lèi)對(duì)象

$my_father->work();

$my_son=new son(“兒子”);

$my_son->work();

$my_son->play();

解析:在父類(lèi)father里,我們定義了一般的屬性和方法,然后定義子類(lèi)。你可能發(fā)現(xiàn)在子類(lèi)里內(nèi)是沒(méi)有構(gòu)造函數(shù)和析構(gòu)函數(shù)的,因?yàn)樽宇?lèi)是繼承了父類(lèi)的所有方法,所以可以調(diào)用$my_son->work(); 這就是PHP類(lèi)的繼承了。另外要注意:PHP不能多層繼承,如:class A extends B extends C,這樣的繼承在PHP中是無(wú)效的,PHP里只有單繼承,不能多繼承,需要其他辦法變相“實(shí)現(xiàn)”多繼承。

?