国产色诱美女免费视频|欧美精彩狠狠色丁香婷婷|91黑人|日本黄色小视频|欧美一级黄色视频在这里免费观看

IT培訓-高端面授IT培訓機構
云和教育:云和數據集團高端IT職業教育品牌
  • 國家級
    全民數字素養與技能培訓基地
  • 河南省
    第一批產教融合型企業建設培育單位
  • 鄭州市
    數字技能人才(碼農)培養評價聯盟

【技術】深入探討PHP類的封裝與繼承

  • 發布時間:
    2015-12-09
  • 版權所有:
    云和教育
  • 分享:

類是面向對象中的重要概念,而封裝和繼承是面向對象的重要特點。這篇文章和大家重點討論一下封裝、繼承這兩個特點,給出一些例子,供大家學習參考。

封裝

把成員方法和成員屬性封裝到類中,隱藏屬性和方法實現的細節,通過public、protected、private等限定類成員的訪問權限,數據被保護在內部,只通過被授權的成員方法才可以操作,盡可能的對成員進行封裝。

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

protected:本類和子類可以訪問,外部對象不可以調用。

private:只能在本類訪問,子類與外部對象都不可能調用。經過private標記的方法或者屬性可以在繼承類中重新定義,每一個類只能看到它自己定義的私有方法。

這三個修飾符從作用范圍上來講應該像這樣從大到小排序:public→protected→private之所以說是在作用范圍上,是因為類把一些屬性和方法進行了封裝,這個封裝就決定了數據的“可見性”,這樣我們在類的外面不能夠隨意修改所定義的屬性和方法而只能夠進行調用,這就是封裝的好處,同時也提高了安全性。

我們給出代碼示例:

class myClass{

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

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

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

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

//只是舉例說明,自行添加內容

}

$obj=new myClass();

echo $obj->public;

//echo $obj->protected;

//echo $obj->private;

通過運行以上示例我們得到一個“Public”,但當你把//echo $obj->private;的注釋去掉時,你會得到一下如下的錯誤:Fatal error: Cannot access protected property myClass::$protected in E:apachehtdocsexamplefile.php on line 13。可以看到我們不能隨意去訪問類的屬性定義,我們在“外面”是不知道這個類中到底有那些成員,因為這些成員對于其他的類可能是不可見的。當然如果我們一定要訪問或者修改定義為“私有”的屬性時,也可以使用PHP所提供的系統方法:_get()和_set()。

繼承

可以使一個類繼承并擁有另一個已經存在類的成員屬性和方法,被繼承的類稱為父類或基類,繼承類為子類。通過extends關鍵字實現繼承關系。通俗來說,要有繼承就得有一個“根源”,這“根源”你可能想像你以后生了兒子或者女兒,他們會從你這里得到一些“東西(屬性和方法)”,這樣你的“后代”就是持有你(根源)所有的一些特征了。

產生“根源”類(父類或者基類)

語法:class father{

}

產生“后代”(子類)

語法:class son extends father{

}

PHP extends類繼承示例代碼:

class father{

protected $name;

function __construct($name){ ? ? //構造函數

$this->name=$name;

}

function work(){

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

}

function __destruct(){} ? ? ?//析構函數

}

class son extends father{ ? ? ?//繼承父類

function play(){

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

}

}

$my_father=new father(“爸爸”); ? ? //創建父類對象

$my_father->work();

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

$my_son->work();

$my_son->play();

解析:在父類father里,我們定義了一般的屬性和方法,然后定義子類。你可能發現在子類里內是沒有構造函數和析構函數的,因為子類是繼承了父類的所有方法,所以可以調用$my_son->work(); 這就是PHP類的繼承了。另外要注意:PHP不能多層繼承,如:class A extends B extends C,這樣的繼承在PHP中是無效的,PHP里只有單繼承,不能多繼承,需要其他辦法變相“實現”多繼承。

?