PHP類的繼承和介面
阿新 • • 發佈:2019-02-08
PHP類的繼承的一些語法
-PHP的類只支援單繼承,就是每個類最多隻能有一個父類或者沒有父類。
-子類不能繼承父類使用private修飾的成員。
修飾符 | 可訪問範圍 |
---|---|
public | 當前類、子類和類外 |
protected | 當前類和子類 |
private | 當前類 |
類的型別 | 含義 |
---|---|
被final修飾的類 | 只能例項化不能被繼承 |
被abstract修飾的類 | 只能被繼承不能被例項化 |
注意:
被final修飾的方法不能被子類重寫。
-通常要被子類繼承的成員都使用protected,其餘的儘量使用private,把類的內部實現隱藏起來。
-子類可以重寫父類的成員,但不可以重寫父類private修飾的成員。
-可以使用parent訪問父類的成員。
修飾符 | 含義 |
---|---|
self | 當前類本身 |
parent | 當前類父類 |
$this | 當前物件 |
-建構函式和解構函式的執行順序
- 一個沒有父類的類先執行建構函式再執行解構函式
- 一個有父類的類先執行子類的建構函式再執行父類的建構函式,解構函式的執行順序跟建構函式的執行順序相反。
<?php
// 定義一個Person類
class Person {
// 建構函式
public function __construct () {
echo "Person's __construct.",'<br />';
}
// 解構函式
public function __destruct() {
echo "Person's __destruct.",'<br />';
}
}
// 定義一個PersonMale類繼承Person類
class PersonMale extends Person {
// 建構函式
public function __construct() {
echo "PersonMale's __construct." ,'<br />';
// 呼叫父類的建構函式
parent::__construct();
}
// 解構函式
public function __destruct() {
parent::__destruct();
echo "PersonMale's __destruct.",'<br />';
}
}
// 定義一個PersonFemale類繼承Person類
class PersonFemale extends Person{
// 建構函式
public function __construct() {
echo "PersonFemale's __construct.",'<br />';
parent::__construct();
}
// 解構函式
public function __destruct() {
parent::__destruct();
echo "PersonFemale's __destruct.",'<br />';
}
}
$personObject = new Person();
$personMaleObject = new PersonMale();
$PersonFemaleObject = new PersonFemale();
執行結果:
Person's __construct.
PersonMale's __construct.
Person's __construct.
PersonFemale's __construct.
Person's __construct.
Person's __destruct.
PersonFemale's __destruct.
Person's __destruct.
PersonMale's __destruct.
Person's __destruct.
PHP的介面
-一個類可以實現多個介面
-接口裡的方法都是不完整的方法(沒有函式體的)
-介面的使用
<?php
/**
* 介面MyInterFaceA
*/
interface MyInterFaceA {
public function functionA();
public function functionB();
}
/**
* 介面MyInterFaceB
*/
interface MyInterFaceB {
public function functionC();
public function functionD();
}
/**
* 類實現介面MyInterFaceA和MyInterFaceB
* 並且重寫接口裡所有的公共的抽象方法
*/
class MyClass implements MyInterFaceA,MyInterFaceB{
public function functionA() {
}
public function functionB() {
}
public function functionC() {
}
public function functionD() {
}
}