• 技术文章 >后端开发 >php教程

    一个很难理解的PHP继承的问题!

    2016-06-23 14:02:08原创374

    class B
    {
    public $name ="aaa";
    function fb()
    {
    echo get_class($this),"
    ";
    echo $this->name,"
    ";
    }
    }

    class Eb extends B
    {
    public $name = "xxxxxxxxxxxxxxsylar";

    function __construct()
    {
    parent::fb();
    }
    }


    $eb = new Eb();


    // 父类和子类中的$name均声明为public时;执行Eb的构造函数,输出的结果是子类中$name的值xxxxxxxxxxxxxxsylar
    // 父类和子类中的$name均声明为private时;执行Eb的构造函数,输出的结果是子类中$name的值aaa

    求解?


    回复讨论(解决方案)

    $name均声明为public时,自然是子类覆盖父类
    这一点应该不会有问题吧?
    $name均声明为private时,因为方法 fb 是父类的,当然也只能访问父类的私有属性

    你把 fb 方法抄写到 Eb 中,并在 __construct 中加入 $this->fb();
    就真相大白了

    这个是叫重载
    因为是public 子类从父类继承过来变量name 并对其重载,覆盖了原来的值,
    private 的时候,子类不能覆盖父类的变量,这时候就只能输出父类自己本来的值了。

    1.私有属性不能被覆盖,
    2.子类调用父类私有属性 当然直接输出父类的了!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:数组用下标来重组数组,为什么重组出来的数组下标一直是第一个? 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 手写PHP API框架(二)之Composer的安装使用• 聊聊PHP escapeshellarg函数使用的中文问题• 设计API接口时,要注意这些地方!• 聊聊php怎么让Swoole/Pool进程池实现Redis持久连接• PHP原生类的总结分享
    1/1

    PHP中文网