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;
}
}
版权声明:本文博主原创文章。博客,未经同意不得转载。