我不明白这个话题。为什么派生类访问基类的私有成员?
<?php
class A{
private $name; // private variable
private $age; //private variable
}
class B extends A{
public function Display($name,$age){
echo $this->name=$name." age is ".$this->age=$age;
}
}
$ob=new B();
$ob->Display("xyz",23);
?>
输出: xyz年龄是23岁
答案 0 :(得分:2)
B
类不会继承$name
和$age
属性,因为它们是私有的。
但是,PHP将允许您分配变量而不首先将它们声明为类属性:
<?php
class A
{
private $name; // private variable
private $age; //private variable
public function __construct()
{
$this->name = "a";
}
}
class B extends A
{
public function display($name, $age) {
$this->name2 = $name; // new name2 variable, NOT A's name
$this->age2 = $age; // new age2 variable, NOT A's age
echo $this->name2." age is ".$this->age2.PHP_EOL;
echo $this->name; // A's name, undefined property warning!
}
}
$ob=new B();
$ob->display("xyz", 23);
xyz年龄是23岁
请注意我如何使用name2
和age2
代替name
和age
,输出仍然正确。如您所见,您无法访问A::$name
,但B::$name2
中已定义B::display()
,并且尝试访问A::$name
会为您提供未定义的属性警告。
因此,虽然不完全直观,但这是PHP的预期行为。