Rumah > pembangunan bahagian belakang > tutorial php > 一个很难理解的PHP继承的问题!

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2016-06-23 14:02:08
asal
802 orang telah melayarinya

        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.子类调用父类私有属性 当然直接输出父类的了!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan