<?php class fateher{ public $win = ‘一斤‘; public function play(){ echo "理想"; } } class son extends fateher{ public function play(){ echo "网游"; } public function momo(){ echo "momo"; } } $s9 = new son(); echo $s9->win,‘<br/>‘;//一斤 , $s9->play();//网游 $s9->momo();//momo ?> |
继承过来的,是指protected和public
父类有的,继承过来
继承过来,可以修改或覆盖 override
父类没有的,可以添加
继承时的权限变化
继承时,权限只能越来越宽松或不变,不能越来越严格
构造函数的继承
<?php class Human{ public function __construct(){ echo "呱呱坠地<br/>"; } } class Stu extends Human{ } $xiaoming = new Stu(); ?> |
构造函数也是可以继承的,而且继承的原则和普通方法一样
进而,如果子类也声明了构造函数,则父类的构造函数被覆盖了
如果父类的构造函数被覆盖了,自然只执行子类中的新的构造函数
进而引发了一个问题
如果是一个数据库操作类,或者model类,
我们肯定是要继承过去使用,不能直接操作model类
而model 类的构造函数,又做了好多初始化工作
重写model类的构造函数之后,导致初始化工作完成不了怎么办?
<?php class Mysql{ protected $conn = null; public function __construct(){ $this->conn = mysql_connect(‘localhost‘,‘root‘,‘‘); } public function query($sql){ return mysql_query($sql); } } class MyDb extends Mysql{ public function __construct(){ parent::__construct(); //然后重新写子类的 } public function autoInsert(){ return $this->query(‘use test‘); } } /*$mysql = new Mysql(); var_dump($mysql->query(‘use test‘));*/ $mydb = new MyDb(); var_dump($mydb->autoInsert()); ?> |
如果子类继承时,子类有继承函数,保险一点,调用parent::__construct
PHP中,子类只调用自己的或者子类继承的构造函数
继承的特点:
对于private或public 类型的属性和方法,完全继承过来,有权重写,调用
继承过来的属性和方法,
父类有的,子类也有
父类有的,子类可以更改
父类没有的,子类可以添加
对于private 类型的属性和方法,比较特殊
可以继承过来,但是有个标记,标记是从父类属性而来的
即在子类内部无权调用继承过来的私有属性和方法
构造方法的继承
构造方法也是可以继承的,
New子类时,如果构造方法继承过来,当然也要自动执行
但继承过来,子类重写了,自然执行子类的构造方法
注意:父类的构造方法不能再调用
本文出自 “杜国栋个人PHP学习博文” 博客,请务必保留此出处http://duguodong.blog.51cto.com/7667978/1387193
时间:2014年3月30日21:32:15公共及保护属性和方法的继承,布布扣,bubuko.com
时间:2014年3月30日21:32:15公共及保护属性和方法的继承
原文:http://duguodong.blog.51cto.com/7667978/1387193