封装的概念:可以通过权限修饰符,把某些属性封装在类的内部,
并通过指定的公共接口来访问,
还有,调用某个公共方法时,该公共方法可能调用在内部多个方法,
但是调用者不知道内部的调用过程
Public和private区别:
看调用私有属性private属性方法的那句话,发生在类{}内部,还是类{}外部
【主要内容】
3种权限修饰符比较
继承时的权限变化
构造函数的继承
私有属性的继承
继承:是指以一个类为父类,另一个类为子类,
子类继承父类的属性和方法的基础上,还可以增添或修改
<?php class Human{ private $height = 160; public function cry(){ echo "55555<br/>"; } } class Stu{ private $height = 170; public $snum = ‘00134‘; public function cry(){ echo "59595959<br/>"; } public function study(){ echo "good good study good good study<br/>"; } } class Lawer{ private $height = 180; public $area = ‘经济案件‘; public function cry(){ echo "55555<br/>"; } public function bianhu(){ echo "我的当事人是无罪的<br/>"; } } $zhoukouren = new Human(); $xiaoming = new Stu(); $lizhuang = new Lawer(); $zhoukouren->cry();//55555 $xiaoming->study();//good good study good good study $lizhuang->cry();//55555 $lizhuang->bianhu();//我的当事人是无罪的 ?> |
思考:
1.学生和律师,归根结底还是人,自然人的 属性和方法都具有
2. 学生和律师,虽然是人,但是比原始的人,又多了一些属性和方法
3. 以上三个类,既有原始人的属性,又有学生和律师的独特的属性,没有很好的利用上第一点
4. 既然都是人,默认就应该有人的属性,何必再声明一遍呢?
5. 代码已经冗余
如何达到学生和律师就有人的属性,达到代码的重用和简介,
利用继承
<?php class Human{ private $height = 160; public function cry(){ echo "55555<br/>"; } } //再声明一个学生类,学生的本质还是人 //只不过是在人类中,稍微特殊的一个群体 //即在人类的基础上,衍生出的学生类 //可以让学生类,继承与人类 class Stu extends Human{} $lili = new Stu(); $zhoukou = new Human(); $zhoukou->cry();//55555 $lili->cry();//55555 $lili->laugh();// Call to undefined method Stu::laugh() ?> |
在学生类中,cry()和laugh()都没有定义,为什么cry()可以调用成功,laugh()调用失败
因为stu类,继承自Human类
现实中,继承的例子很多:
语法:extends
子类 extends 父类{}
注意:
子类,只能继承自一个父类
子类继承了哪些东西?
子类可以做什么扩充?
构造函数如何继承?
私有属性和方法如何继承?
私有属性的继承
<?php class Human{ private $wife = "meimei"; public function tell(){ echo $this->wife,‘<br/>‘; } public function cry(){ echo "5555555555555<br/>"; } } class Stu extends Human{ public function subtell(){ echo $this->wife; } } $lisi = new Stu(); $lisi->cry();//5555555555555 $lisi->tell();//meimei $lisi->subtell();//出错,未定义的wife属性 ?> |
父类的wifi属性属性,为什么没继承过来?
私有属性,可以理解不能继承,
其实可以继承过来,只不过无法访问。
Public protected private 中,
Public protected 都可以继承,并拥有访问和修改的权限
Private 私有的,可以继承,无权操作
对于子类继承父类的Public protected 属性和方法,
1.父类有的,子类可以继承
2.父类有的,子类可以更改
3.父类没有的,子类可以添加
父类的private可以继承,但不能操作:
<?php class Human{ private $wife = "meimei"; public function tell(){ echo $this->wife,‘<br/>‘; } public function cry(){ echo "5555555555555<br/>"; } } class Stu extends Human{ private $wife = ‘coco‘; public function subtell(){ echo $this->wife; } } $lisi = new Stu(); print_r($lisi); //Stu Object ( [wife:private] => coco [wife:private] => meimei ) ?> |
继承时,继承来protected 和public属性和方法
继承来,子类private属性和方法,但不能操作
本文出自 “杜国栋个人PHP学习博文” 博客,请务必保留此出处http://duguodong.blog.51cto.com/7667978/1386750
时间:2014年3月29日19:20:41继承,布布扣,bubuko.com
原文:http://duguodong.blog.51cto.com/7667978/1386750