類、面向對象、類的繼承

類:

它是用於描述「某一些具備共同特徵」的物體的概念,是某一類物體的總稱。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種

 

值傳遞: 傳遞的時候,拷貝的是數據自己。默認都是值傳遞。

 

結果:傳遞完以後,有了2份一樣的數據,但兩個變量「相互獨立」沒有關係。

 

引用傳遞傳遞的時候,拷貝的是引用關係。須要使用」才能實現引用傳遞。

 

結果:傳遞完以後,數據仍然只有一份,可是兩個變量共同指向該數據。

對象的存儲跟普通變量的存儲有所區別:

普通變量:

對於對象(變量):

類中的成員:屬性、方法、類常量

 定義形式:

形式3:     public  $v1;

形式4:     public   $2 = 2;

 

使用形式:

$對象->屬性名;

 

注意:屬性名前面沒有$符號。

 

方法前能夠加修飾詞:public, protected,private,省略就算public

 

方法中$this關鍵字:

 

$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:私有的,

public公有的:

 

語法模式:

 

對象->成員;

 

類名::成員;

 

訪問位置分爲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 受保護的:

 

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私有的:

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

能夠

不能夠

不能夠

 

 parent表明父類:

 

對比: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();
parent關鍵字常見用法

相關文章
相關標籤/搜索