它是用於描述「某一些具備共同特徵」的物體的概念,是某一類物體的總稱。ide
一般,一個類所具備的共同特徵包括2大方面的信息:函數
外觀,形狀,描述,數據。。。。。屬性ui
行爲,動做,功能。。。。。。。。方法
this
舉例子:spa
人類;動物類;鳥類code
它是指一個具體的「物體」,該物體隸屬於某個「類別」(類)。對象
一般,對象離不開類,沒有類,就不能有對象。blog
//建立類 class computer{ //定義屬性 var $code ="c1"; var $color ="black"; //定義方法 function show(){ echo "這臺電腦型號是:".$this->code."<br />"."顏色是:".$this->color."<br />"; } } //建立類的對象 $com = new computer(); $com->code ="c2"; $com->color="中國紅"; //調用類裏面的方法 $com->show(); $com1 = new computer(); //$com1->code="c3"; //$com1->color="黃金黃"; $com1->show();
方式1:繼承
$對象名1 = new 類名(); //對象名就是變量名;類是應該定義過了字符串
方式2:
$CName = C1;
$person3=new $CName();
方式3:
$對象名3 = new self; //self指代類自己,這行代碼只能在類內部方法中使用。
方式4:
經過對象建立對象 new 對象名;//建立該對象所屬類的一個新對象
$person4 = new $person3;
值傳遞: 傳遞的時候,拷貝的是數據自己。默認都是值傳遞。
結果:傳遞完以後,有了2份一樣的數據,但兩個變量「相互獨立」沒有關係。
引用傳遞: 傳遞的時候,拷貝的是引用關係。須要使用「&」才能實現引用傳遞。
結果:傳遞完以後,數據仍然只有一份,可是兩個變量共同指向該數據。
對象的存儲跟普通變量的存儲有所區別:
普通變量:
對於對象(變量):
定義形式:
形式3: public $v1;
形式4: public $2 = 2;
使用形式:
$對象->屬性名;
注意:屬性名前面沒有$符號。
方法前能夠加修飾詞:public, protected,private,省略就算「public」
$this是一個「僞對象」,表明當前所屬類的當前對象。
一個系統函數:get_class(對象)
做用:得到某個對象的「所屬類名」——結果只是一個類名字符串。
$class_name = get_class($p1); //結果多是:」Person」
屬性前加關鍵字:static
靜態屬性就是:只隸屬於類自己——也能夠看作是全部對象的「共有數據」。
經過特殊的語法:::(雙冒號語法,也叫範圍解釋符)
類::$靜態屬性名;
使用方法跟靜態屬性相似:
類名::靜態方法名();
注意:$this在靜態方法中不能使用。
self:
含義:表明當前類
使用:一般只能在某個類的某個方法內部表明該類的名稱。
1,該方法名字是固定的,爲:_ _construct();注意:兩個下劃線
2,該方法必須是普通方法(不能是靜態方法)
3,一般該方法應該是public
4,一般該方法中使用$this這個關鍵字來對屬性進行賦值
5,當new 類名()的時候,實際上是在調用該構造方法
6,若是一個類中定義了構造方法,則實例化該類時就會調用該方法,且實例化時的參數須要跟構造方法的參數匹配
銷燬信息:_ _destruct()
1,析構方法一般不太須要去定義。
2,析構方法不能調用。
3,析構方法不能有形參。
4,析構方法中能夠用於清理一些在php代碼結束後不能清理的數據,如生成的文件。
對象銷燬的幾個情形:
腳本程序運行結束,自動銷燬;
明確地unset()一個對象變量,則被銷燬;
改變對象變量的值,被銷燬;
實際上,更本質來講,當一個對象(new 出來的對象)沒有任何一個變量指向它的時候,該對象就會被自動銷燬——天然,若是整個程序結束,也會銷燬。
含義理解:某個類A具備某些特徵,另外一個類B,也具備A類的全部特徵,而且還可能具備本身的更多的一些特徵,此時,咱們就能夠實現:B類使用A的特徵信息並繼續添加本身的一些特有特徵信息。(對象的屬性多,類的屬性最少)
Class jizuidongwu{ public $prop1 = "有脊椎"; function show1(){ echo "<br />特徵:" . $this->prop1; } } Class human extends jizuidongwu{ public $prop2 = "兩腳走路"; function show2(){ echo "<br />特徵:" . $this->prop1; echo "<br />特徵:" . $this->prop2; } } $person1 = new human(); $person1->show2();
繼承:一個類從另外一個已有的類得到其特性,稱爲繼承。
派生:從一個已有的類產生一個新的類,稱爲派生。
繼承和派生,其實只是從不一樣的方向(角度)來表述,本質上就是一個事情。
父類/子類:已有類爲父類,新建類爲子類。父類也叫「基類」,子類也叫「派生類」
單繼承:一個類只能從一個上級類繼承其特性信息。PHP和大多數面向對象的語言都是單繼承模式。C++是多繼承。
擴展:在子類中再來定義本身的一些新的特有的特性信息(屬性,方法和常量)。沒有擴展,繼承也就沒有意義了
在類中的成員,一般均可以在前面加上如下3個修飾符:
public:公共的,共有的,公開的
protected:受保護的
private:私有的,
語法模式:
對象->成員;
類名::成員;
訪問位置分爲3個:
1:某個類內部:天然是該類的某個方法中
2:某個類的具備繼承關係的子(父)類的內部:是指其餘類的某個方法中。
3,某個類的外部:通常就是獨立的代碼區(不在類中),相似咱們以前的代碼。
class C{ public $p1 = 1; public function showInfo(){ echo "<br />屬性p1=" . $this->p1; echo "<br />屬性p2=" . $this->p2;//此時能夠訪問下級的$p2(但很不經常使用) } } class D extends C{ public $p2 = 2; public function showInfo2(){ echo "<br />屬性p1=" . $this->p1;//訪問的是上級的$p1(常見情形) echo "<br />屬性p2=" . $this->p2; } } $d1 = new D(); $d1->showInfo2(); echo "<br />在類外p2=" . $d1->p2; $d1->showInfo();
protected修飾的成員,能夠在當前類或當前類的上下級具備繼承關係的類中訪問。
class C{ protected $p1 = 1; public function showInfo(){ echo "<br />屬性p1=" . $this->p1; } } class D extends C{ protected $p2 = 2; public function showInfo2(){ echo "<br />屬性p1=" . $this->p1;//訪問的是上級的受保護成員$p1 echo "<br />屬性p2=" . $this->p2;//訪問的是本身的受保護成員$p1 } } $d1 = new D(); $d1->showInfo2(); echo "<br />在類外p2=" . $d1->p2;//這一行出錯,由於在「外面」不能訪問受保護成員$p2
private 修飾的成員,只能在其所在的類中訪問。
class C{ private $p1 = 1; public function showInfo(){ echo "<br />屬性p1=" . $this->p1; } } class D extends C{ private $p2 = 2; public function showInfo2(){ echo "<br />屬性p1=" . $this->p1;//訪問的是上級的似有成員$p1 echo "<br />屬性p2=" . $this->p2;//訪問的是本身的私有成員$p1 } } $d1 = new D(); $d1->showInfo2(); echo "<br />在類外p2=" . $d1->p2;//這一行出錯,由於在「外面」不能訪問私有成員$p2
訪問修飾限定符的總結:
範圍 |
本類內 |
繼承關係類內 |
類外 |
public |
能夠 |
能夠 |
能夠 |
protected |
能夠 |
能夠 |
不能夠 |
private |
能夠 |
不能夠 |
不能夠 |
對比:self表明「本類」(本身當前類)
parent一般用於在子類中調用父類的成員的時候使用,多數一般就是使用父類的「靜態類」成員。
——由於parent表明的類,而非對象。
class C{ public $p1 = 1; function showMe(){ echo "<br />我是父類,數據有:"; echo "<br />C中p1=" . $this->p1; } function __construct($p1){ $this->p1 = $p1; } } class D extends C{ public $p2 = 2; function __construct($p1,$p2){ //經典用法 parent::__construct($p1);//調用父類的構造函數來初始化p1 $this->p2 = $p2; //初始化p2 } function showMe2(){ echo "<br />我是子類,數據有:"; //基本用法: parent::showMe();//調用父類的showMe方法, echo "<br />D中p2=" . $this->p2; } } $d1 = new D(10,20); //此時就須要尊照構造函數的參數結構來使用 $d1->showMe2();