• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP继承小疑点

php 搞代码 3年前 (2022-01-24) 11次浏览 已收录 0个评论

PHP继承小问题
自己写了一点测试继承关系的代码,如下:

<body>
<?php
class A
{
public $pub_A;
private $pri_A;
public function pub()
{
$this->pub_A = ‘It is public of A!’;
echo “

“.$this->pub_A.”

“;
}
protected function pri()
{
$this->pri_A = ‘It is private of A!’;
echo “

“.$this->pri_A.”

“;
}
}

class B extends A
{
public $pub_B;
private $pri_B;
function __construct()
{
echo “

“.$this->pri().”

“;
$this->pri_A = 10;
echo “

“.$this->pri_A.”

“;
}
}
$b = new B;

?>

重点我标了出来,在父类A中,$pri_A是private的,应该不能被子类B继承,可为什么下面可以对pri_A赋值并且显示出赋值后的数?
——解决方案——————–
private:方法或者属性只能从类的一个成员中访问到,而且无法从继承类的成员中访问到。

经过private便签标记的方法或者属性可以在继承类中重新定义。

每一个类只能看到它自己定义的私有方法。
——解决方案——————–
子类可以通过父类的公

本文来源gao!%daima.com搞$代*!码$网3

搞代gaodaima码有方法去访问父类的属性
——解决方案——————–

我测试了下代码,如果在A中给$pri_A=”aaa”,在B中不赋值的话将不能得到值,在B中赋值之后得到赋值后的值,可见在子类中是可以对父类的私有属性重新定义的。
——解决方案——————–

引用

重点我标了出来,在父类A中,$pri_A是private的,应该不能被子类B继承,可为什么下面可以对pri_A赋值并且显示出赋值后的数?

问题不是子类访问了 父类的 私有成员

而是 子类调用了$this->pri()方法

这个方法是继承父类的

但是父类的这个方法调用了父类的私有成员
——解决方案——————–
是的,私有属性不被继承!
这一点你可以通过这样看到
function __construct()
{
echo “

“.$this->pri().”

“;
echo isset($this->pri_A) ? ‘yes’ : ‘no’;//这里将输出 no
$this->pri_A = 10;
echo “

“.$this->pri_A.”

“;
}

pri() 方法是父类的,自然可以访问其私有属性

当你 $this->pri_A = 10; 后,将在对象 $b 中创建名为 pri_A 的公共属性(public)
这一点你可以这样看到
print_r($b);
输出:
B Object
(
[pub_B] =>
[pri_B:private] =>
[pub_A] =>
[pri_A:private] => It is private of A!
[pri_A] => 10
)


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP继承小疑点

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址