PHP抽象類和接口是什么意思它們兩者有什么區別呢,在此小編來為各位介紹一篇關于PHP抽象類和接口的區別吧,具體的細節如下所示,希望文章能夠幫助到各位朋友。
抽象類(abstract class)和接口(interface)是面向對象很重要的概念,他們很相似,都是定義要實現的方法,但又有不同的使用場景,PHP的抽象類和接口有什么區別,看下面的示例。
接口(Interface)—— 定義行為
抽象類(Abstract Class) —— 實現行為
具體類(class)——執行行為
一.接口
接口定義了某種函數的規范,聲明了所需的函數和常量,但是不能指定怎么實現。接口像是對具體類中方法的規范。
接口定義了發生某一行為需要的方法、方法名。然后允許具體的類來實現這些方法。。
注意:接口類不能定義類成員。定義的方法必須在實現的類中出現。
- interface 接口名
- {
- function 方法1( );
- function 方法2( );
- }
- //實現接口
- class 類名 implements 接口名
- {
- 方法1( );
- 方法2( );
- }
二.抽象類
抽象類是實例化的類,只能作為被其他類基層的基類。例如,可以寫一個關于read的抽象類,然后電子閱讀,紙質閱讀來繼承read抽象類。
- abstract class 類名
- {
- 各種方法
- }
抽象類可以確保一致性,因為任何派生類都必須實現從該抽象類繼承所有抽象方法,如果沒有實現,那將產生錯誤。
應該用抽象類?還是 接口?
這是一個問題
** 如果要建一個類模型,這個模型將由一些緊密相關的對象采用,使用抽象類。如果模型將由不太相關的對象采用,用接口。
** 如果一個具體class將從多個來源繼承行為,用接口。php類可以繼承多個接口,但是不能繼承多個抽象類。
** 如果所有的類都要共享一個公共的行為實現,用抽象類,并在其中實現該行為。。先用子類繼承一個抽象類,繼承后的子類能夠實現原先的行為。。
摘: _______
事物的出現,總是有它出現的理由(需求)!
但是,事物的生存,需要有適應性(靈活)!
比如:長頸鹿,脖子長,這是個抽象的概念;
能吃草(是非肉食性動物的特征,接口)。
所以,當需要描述長頸鹿的時候,我們就可以用接口(非肉食性動物)和抽象(脖子長)的方法來定義它,
然后,具體是什么種類/或者顏色的長頸鹿,怎么個吃草法,這就是具體類了
PHP接口類
首先看接口,定一個接口類,interface class:
- namespace frontend/models;
- interface TestInterface
- {
- public function cloud();
- public function sky();
- public static function color($color);
- }
在PHP中,接口只能定義方法(或靜態方法),但是不能實現具體的方法。在PhpStorm中如果寫具體的方法會提示錯誤。接口比較嚴格的定義需要實現什么方法,只寫要實現的方法就行了,不需要具體實現,或定義成員變量。
使用接口:
- namespace frontend/models;
- class Test implements TestInterface
- {
- public function cloud()
- {
- echo 'Cloud....';
- }
- public function sky()
- {
- }
- //Vevb.com
- public static function color($color){
- }
- }
繼承接口類,必須實現接口定義的每個方法,否則也會報錯,這就是PHP的接口,嚴格定義實現哪些方法,并且必須在子類中都實現.
PHP抽象類
我們定義一個抽象類:
- abstract class Testabstract
- {
- public $abstract = 'abstract';
- abstract function hehe();
- public function hehe2()
- {
- echo 'hehe2';
- }
- }
這里有兩個方法,一個是用abstract修飾的,這樣寫表示該方法是子類必須實現的,而抽象類中只能定義不能具體實現,一個方法是普通的成員方法,而且有具體實現,子類也可以重寫.
- class ab extends Testabstract
- {
- public function hehe()
- {
- echo 'hehe';
- }
- }
子類繼承抽象類,只需實現抽象類中定義的抽象方法,抽象類可以定義成員變量,而接口不行.
新聞熱點
疑難解答