php7實踐指南 ch9類與方法 抽象類和介面

2021-10-13 09:00:00 字數 1016 閱讀 6402

9.5 抽象類和介面

抽象類和介面都是不能被例項化的特殊類,可以在抽象類和介面中保留公共的方法,將抽象類和介面作為公共的基類。

9.5.1 抽象類

abstract class class_name
乙個抽象類必須至少包含乙個抽象方法,抽象類中的方法不能被定義為私有的(private),因為抽象類中的方法需要被子類覆蓋,同樣抽象類中的方法也不能用final修飾,因為其需要被子類繼承。抽象類中的抽象方法不包含方法實體。如果乙個類中包含了乙個抽象方法,那麼這個類也必須宣告為抽象類。

比如我們定義乙個資料庫抽象類,有很多種資料庫,比如mysql、oracle、mssql等,雖然每種資料庫都有不同的使用方法,但是對於資料庫來說都有一些共同的操作部分,比如建立資料庫鏈結、查詢資料、關閉資料庫鏈結等。這樣我們就能抽象出可適用於不同資料庫操作的抽象基類。如下示例定義乙個抽象database類:

<?php

abstract class database

}

下面定義乙個mysql類繼承自抽象基類database。

class mysql extends database

function query($sql)

function fetch()

function close()

}

抽象類中的抽象方法必須被子類實現(除非該抽象類的子類也為抽象類),否則會報錯;抽象類中的非抽象方法可不被子類實現(如示例中的test()方法)。非抽象方法必須包含實體,抽象方法不能包含實體。

9.5.2 介面

樣,介面是需要被繼承的,所以介面中定義的方法不能為私有方法或被final修飾。介面中定義的方法必須被子類實現,並且不能包含實體。

介面中所有的方法都必須被子類實現

與抽象類不同的是,乙個子類可繼承自多個介面

類繼承多個介面,多個介面之間用「, 」分開,類要實現其繼承的所有介面的全部方法。

除了類可以繼承介面外,介面也可以繼承介面。

php7實踐指南 ch9類與方法 自動載入

9.4 自動載入 很多時候寫物件導向的應用程式時對每個類的定義建立乙個php原始檔。乙個很大的煩惱是不得不在每個指令碼開頭寫乙個長長的包含檔案列表 每個類乙個檔案 對於每乙個類檔案都需要使用require或者include引入。php中提供了兩個可用來自動載入檔案的函式 autoload 和spl ...

php7實踐指南 ch9類與物件 類中的關鍵字

類中的關鍵字 final clone instanceof 9.6.1 final關鍵字 子類可覆寫父類中的方法,但是在有些時候並不希望父類中的方法被重寫,這時只需要在父類中的方法前加上final控制符,該方法便不能被子類重寫,否則會報錯。例如,下面的 就不是乙個合法的php指令碼 class fa...

php7實踐指南 ch19 php設計模式

設計模式是軟體工程的基石,如同大廈的一塊塊磚石一樣。專案中合理地運用設計模式可以完美地解決很多問題,每種模式在現實中都有相應的原理來與之對應,每種模式都描述了乙個在我們周圍不斷重 生的問題,以及該問題的核心解決方案,這也是設計模式能被廣泛應用的原因。19.2 工廠模式 工廠模式屬於建立型模式,提供了...