Heim >php教程 >php手册 >Php面向对象 – 继承和重写

Php面向对象 – 继承和重写

WBOY
WBOYOriginal
2016-06-13 09:26:141003Durchsuche

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

可以使用一个关键字,在类内,代替当前的父类

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;

}

}

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn