1. 程式人生 > >PHP類的繼承和介面

PHP類的繼承和介面

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() {

    }
}