封装的概念:可以通过权限修饰符,把某些属性封装在类的内部,

并通过指定的公共接口来访问,

还有,调用某个公共方法时,该公共方法可能调用在内部多个方法,

但是调用者不知道内部的调用过程

Publicprivate区别:

看调用私有属性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 = "×××";

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();//×××

$lisi->subtell();//出错,未定义的wife属性

?>

父类的wifi属性属性,为什么没继承过来?

私有属性,可以理解不能继承,

其实可以继承过来,只不过无法访问。

Public protected private 中,

Public protected 都可以继承,并拥有访问和修改的权限

Private 私有的,可以继承,无权操作

对于子类继承父类的Public protected 属性和方法,

1.父类有的,子类可以继承

2.父类有的,子类可以更改

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

父类的private可以继承,但不能操作:

<?php

class Human{

private $wife = "×××";

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] => ××× )

?>

继承时,继承来protected public属性和方法

继承来,子类private属性和方法,但不能操作