现在的位置: 首页 > 综合 > 正文

Php面向对象 – 继承和重写

2018年03月21日 ⁄ 综合 ⁄ 共 2212字 ⁄ 字号 评论关闭

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;

       }

}

抱歉!评论已关闭.