Php面向对象 – 继承和重写

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

 

 

能够使用一个keyword。在类内。取代当前的父类

parentkeyword

 

样例:

 

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;

       }

}

版权声明:本文博主原创文章。博客,未经同意不得转载。

posted @ 2015-09-11 19:53  zfyouxi  阅读(227)  评论(0编辑  收藏  举报