PHP继承小疑点

WBOY
Freigeben: 2016-06-13 13:01:11
Original
761 Leute haben es durchsucht

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便签标记的方法或者属性可以在继承类中重新定义。

每一个类只能看到它自己定义的私有方法。
------解决方案--------------------
子类可以通过父类的公有方法去访问父类的属性
------解决方案--------------------

我测试了下代码,如果在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
)
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage