PHP面向对象笔记 —— 118 私有属性的继承

// ===代码部分1===

class Human {
    private $wife = '小甜甜';
    public function tell() {
        echo $this->wife,'
'
; } public function cry() { echo '5555
'
; } } class Stu extends Human { public function subtell() { echo $this->wife,'
'
; } } $lisi = new Stu(); $lisi->cry(); //5555 $lisi->tell(); //小甜甜 $lisi->subtell(); //报错 /* 未定义的属性,wife属性 Notice: Undefined property: Stu::$wife */

/*
问:父类不是有wife属性吗?为什么没继承过来?
答:私有的属性,可以理解不能继承.
(其实继承过来了,只不过无法访问)
*/
PHP面向对象笔记 —— 118 私有属性的继承_第1张图片



// ===代码部分2===

class Human2 {
    private $wife = '小甜甜';

    public $age = 22; 

    public function cry() {
        echo '5555
'
; } } class Stu2 extends Human2 { private $wife = '凤姐'; public $height = 180; public function subtell() { echo $this->wife; } } $lisi = new Stu2(); echo '
';
print_r($lisi);
/*
Stu2 Object
(
    [wife:Stu2:private] => 凤姐
    [height] => 180
    [age] => 22
    [wife:Human2:private] => 小甜甜
)
*/

PHP面向对象笔记 —— 118 私有属性的继承_第2张图片



// 如何访问继承过来的父类属性

// ===代码部分3===

class Human3 {
    private $wife = '小甜甜';

    public $age = 22; 

    public function cry() {
        echo '5555
'
; } } class Stu3 extends Human3 { private $wife = '凤姐'; public $height = 180; public function sshow() { parent::pshow(); echo $this->wife; } } $lisi = new Stu3(); //echo '
';
//print_r($lisi);
$lisi->sshow();
// Fatal error: Call to undefined method Human3::pshow()

PHP面向对象笔记 —— 118 私有属性的继承_第3张图片
/*
根据图来思考:
如果把Stu类中的 wife=凤姐去掉,什么效果? // 未定义属性
如果把Human类中的 wife=小甜甜去掉,什么效果? // 无权访问
*/



/*
总结:

继承时,继承来protected/public 属性/方法
完全继承过来,属性子类.

继承来的 父类private 属性/方法
继承但不能操作.
*/

你可能感兴趣的:(PHP,Object,Oriented,PHP面向对象笔记)