類別是物件導向中的重要概念,而封裝和繼承是物件導向的重要特性。這篇文章我們就重點討論一下封裝、繼承這兩個特點,給一些列子,供大家學習參考。
封裝
將成員方法與成員屬性封裝到類別中,並隱藏屬性與方法 實作的細節,透過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裡面只有單繼承,不能多繼承,需要其他辦法變相「實作」多繼承。
以上是php class封裝與繼承用法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!