PHP面向物件之私有屬性繼承和重寫 private
阿新 • • 發佈:2020-12-10
私有屬性繼承和重寫
- 說明
- 私有屬性可以繼承但不能重寫
私有-受保護
- 程式碼分析(私有-受保護)
- 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中的$thisprotected
保護屬性,能夠在繼承間屬性繼承,所以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();
?>