php面向对象 – 继承和重写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;}}http://www.bkjia.com/PHPjc/871196.html www.bkjia.com true http://www.bkjia.com/PHPjc/871196.html TechArticle php面向对象 – 继承和重写 php面向对象 – 继承和重写 继承: php中,通过在类上,使用特殊的操作达到目的。 通过在定义类时,利用exte...
