首页 > 其他 > 详细

时间:2014年3月30日21:32:15公共及保护属性和方法的继承

时间:2014-03-31 03:01:46      阅读:401      评论:0      收藏:0      [点我收藏+]


<?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

?>

继承过来的,是指protectedpublic

父类有的,继承过来

继承过来,可以修改或覆盖 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中,子类只调用自己的或者子类继承的构造函数

继承的特点:

对于privatepublic 类型的属性和方法,完全继承过来,有权重写,调用

继承过来的属性和方法,

父类有的,子类也有

父类有的,子类可以更改

父类没有的,子类可以添加

对于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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!