class FatherClass
{
// private $salary = 1000;
private $salary = 1000;
public function showInfo()
{
echo $this->phone . '<br/>';
echo $this->salary . '<br/>';
}
}
class ChildClass extends FatherClass
{
protected $phone = '13987654321';
private $salary = 20000;
}
$child = new ChildClass();
$child->showInfo();
echo '<pre>';
print_r($child);
输出:
13987654321
1000
ChildClass Object
(
[phone:protected] => 13987654321
[salary:ChildClass:private] => 20000
[salary:FatherClass:private] => 1000
)
疑问:
child实例现在有两个私有属性,我可以理解为成员方法在哪个类中,私有属性就调用哪个类的
那么如果注释掉父类中的 private $salary = 1000; 结果就会报错:
Cannot access private property ChildClass::$salary····
不能访问 ChildClass 类的私有属性,我也可以理解,因为父类相对子类是类外,不能访问私有属性
那么 protected 的属性也在类外,怎么又能访问了呢?
如果理解为 子类继承了父类的成员方法,所以访问到了子类的 protected 属性,那为什么又不能访问子类的私有属性呢?
还是说:私有属性是区分类的(从打印结果看出),访问私有属性时,只访问本类中的私有属性,而访问public和protected的属性,则根据对象实例具体的值决定?
谢谢诸位,不知道我的描述清楚不
protected能访问, 是因为protected规定继承类可以访问,外部不可以. 设定这个关键字就是为了干这个的