私有属性继承和重写
私有-受保护
- 代码分析(私有-受保护)
- showA()和showB()中的$this都表示B的对象,B中继承了A的私有属性,所以B中有两个$name
- 在showA()中只能访问A中的$name,不能访问B中的$name
- 在showB()中只能访问B中的$name,不能访问A中的$name
<?php
class A {
private $name='PHP';
public function showA() {
echo $this->name,'<br>'; //PHP
var_dump($this);
}
}
class B extends A {
private $name='Java';
public function showB() {
echo $this->name,'<br>'; //Java
}
}
$obj=new B();
$obj->showA();
$obj->showB();
?>
受保护
- 代码分析(受保护)
private
私有属性,只能在类的内部访问,所以showA()可以访问A中的$this,而showB()只能访问B中的$this
protected
保护属性,能够在继承间属性继承,所以showA()和showB()都能够访问A中的$this
<?php
class A {
protected $name='PHP';
public function showA() {
echo $this->name,'<br>'; //PHP
var_dump($this);
}
}
class B extends A {
public function showB() {
echo $this->name,'<br>'; //PHP
}
}
$obj=new B();
$obj->showA();
$obj->showB();
?>
受保护-公有
- 代码分析(受保护-公有)
- B中将A的$name重写,所以$obj中只有一个$name,($name='Java')
- 不管$this在哪个方法中访问,就只能访问这个$name
<?php
class A {
protected $name='PHP';
public function showA() {
echo $this->name,'<br>'; //Java
var_dump($this);
}
}
class B extends A {
public $name='Java';
public function showB() {
echo $this->name,'<br>'; //Java
}
}
$obj=new B();
$obj->showA();
$obj->showB();
?>
私有-公有
- 代码分析(私有-公有)
- 在showA()中既能访问私有的$name,也能访问公有的$name,但是私有的比公有的权限高,所以输出PHP
- 在showB()中不能访问私有的$name,只能访问公有的$name,所以输出Java
<?php
class A {
private $name='PHP';
public function showA() {
echo $this->name,'<br>'; //PHP
var_dump($this);
}
}
class B extends A {
public $name='Java';
public function showB() {
echo $this->name,'<br>'; //Java
}
}
$obj=new B();
$obj->showA();
$obj->showB();
?>