Php物件導向 – 繼承和重寫

來源:互聯網
上載者:User

標籤:物件導向   執行個體   繼承   重寫   

Php物件導向 – 繼承和重寫

 

 

繼承:

php中,通過在類上,使用特殊的操作達到目的。

通過在定義類時,利用extends來指明當前類對象繼承那個類的對象。

 

例子:

 

class C

{

       public  $p_c =  “value c”;

}

 

 

class D extends C

{

       public  $p_d = “value d”;

}

 

$o =  new D;

var_dump($o->p_c)

var_dump($o->p_d)

 

輸出:string(7) “value c”  string(7)“value d”

 

繼承,指的是兩個對象之間,那麼哪有這兩個對象?

 

Instanceof 操作符 (判斷對象是否是某類的執行個體)

 

var_dump($o instanceof D);

輸出:bool(true)

var_dump($o instanceof C);

輸出:bool(true)

 

因此,一個對象即是當前類的執行個體,也是該類所繼承類的執行個體。

 

Class D extends C

D類對象,繼承自C類對象。

父類:被繼承的類,C類

子類:需要繼承的類,D類

基類:C類是D類的基類

擴充類:D類是C類的擴充類。

 

 

重要:

php是單繼承。

 

繼承的目的:

在於擴充,或者使用某類已經存在的操作和資料。

 

 

重寫 override

繼承時,如果發產生員衝突,php的處理方式,為重寫。就是子類同名成員覆蓋父類同名成員。不能看到父類的同名成員。

 

例子:

1.

class P

{

       public  $name = ‘P’;

}

 

class C extends P

{

       public $name = “C”;

}

 

$o = new C;

echo $o->name;

 

 

2.

 

class P

{

       public  $name = ‘P’;

 

       public function  sayName()

       {

              echo‘parent::name’,$this->name;

       }

}

 

class C extends P

{

       public  $name = “C”;

 

       public  function  sayName()

       {

              echo‘self::name’,$this->name;

       }

}

 

$o = new C;

$o->sayName();

 

輸出:self::name C

 

構造方法重寫:

 

例子:

 

class P

{

       public__construct()

       {

              echo“parent::construct”;

       }

}

 

class D extends P

{

       public__construct()

       {

              echo“self::construct”;

       }

 

}

 

$o  =new D;

 

輸出:self::construct

 

 

如果需要,強制執行被重寫的父類方法,可以顯示的使用父類來調用相應的父類方法即可:

 

 

例子:

class P

{

       public__construct()

       {

              echo“parent::construct”;

       }

}

 

class D extends P

{

       public__construct()

       {

              P::__construct();

              echo“self::construct”;

       }

 

}

 

$o  =new D;

 

輸出:parent::construct self::construct

 

 

可以使用一個關鍵字,在類內,代替當前的父類

parent關鍵字

 

例子:

 

class P

{

       public__construct()

       {

              echo“parent::construct”;

       }

}

 

class D extends P

{

       public__construct()

       {

              parent::__construct();

              echo“self::construct”;

       }

 

}

 

$o  =new D;

 

 

如果說父類的構造需要相應的參數,則需要在調用時,將父類構造方法需要的參數傳遞到方法內。

 

例子:

 

class Goods

{

       public  $goods_name ;

       public  $goods_price;

       public  function  __construct($name,$price)

       {

              $this->goods_name= $name;

              $this->goods_price= $price;

       }

}

 

 

class GoodsBook extends Goods

{

       public  $pages;

       public  function  __construct($name,$price,$pages)

       {

              parent::__construct($name,$price);

              $this->pages= $pages;

       }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.