一个很难理解的PHP继承的有关问题
程序员文章站
2022-06-13 17:10:02
...
一个很难理解的PHP继承的问题!
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
求解?
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
求解?
PHP,继承
class
------解决方案--------------------
$name均声明为public时,自然是子类覆盖父类
这一点应该不会有问题吧?
$name均声明为private时,因为方法 fb 是父类的,当然也只能访问父类的私有属性
你把 fb 方法抄写到 Eb 中,并在 __construct 中加入 $this->fb();
就真相大白了
------解决方案--------------------
这个是叫重载
因为是public 子类从父类继承过来变量name 并对其重载,覆盖了原来的值,
private 的时候,子类不能覆盖父类的变量,这时候就只能输出父类自己本来的值了。
------解决方案--------------------
1.私有属性不能被覆盖,
2.子类调用父类私有属性 当然直接输出父类的了!
------解决方案--------------------
$name均声明为public时,自然是子类覆盖父类
这一点应该不会有问题吧?
$name均声明为private时,因为方法 fb 是父类的,当然也只能访问父类的私有属性
你把 fb 方法抄写到 Eb 中,并在 __construct 中加入 $this->fb();
就真相大白了
------解决方案--------------------
这个是叫重载
因为是public 子类从父类继承过来变量name 并对其重载,覆盖了原来的值,
private 的时候,子类不能覆盖父类的变量,这时候就只能输出父类自己本来的值了。
------解决方案--------------------
1.私有属性不能被覆盖,
2.子类调用父类私有属性 当然直接输出父类的了!
相关文章
相关视频
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
上一篇: 微信获取用户基本信息,头像是一张“暂时无法查看”的图?
下一篇: 网站数据里关于地区值的变化逻辑
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论