您好,登錄后才能下訂單哦!
本篇內容介紹了“如何理解PHP抽象類和抽象方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
在上一篇文章中介紹了接口,其中講到了可以把接口理解成一個特殊的抽象類,那么什么是抽象類,想要了解什么是抽象類我們首先要講什么是抽象方法,抽象類和抽象方法的出現,主要還是想方便類的繼承,那接下來我們就來看一下什么是抽象方法,什么是抽象類。
什么是抽象方法
在我們之前的學習中,一個類可以有多個子類,我們定義抽象方法就是為了方便類的繼承。我們類里面定義的沒有方法體的方法就是抽象法。那么什么是方法體?方法體指的就是類聲明的時候大括號以及大括號其中的內容,沒有方法體指的就是沒有這個內容,而是直接在聲明的時候放法明后加上分號結束。這就叫做抽象方法。
需要注意的是,抽象方法在聲明的時候要通過關鍵字“abstract
”來進行修飾。它的語法格式如下:
abstract 訪問權限修飾符 function 方法名1(參數列表); abstract 訪問權限修飾符 function 方法名2(參數列表);
抽象方法的理解還是比較簡單的,接下來我們看一下什么是抽象類。
什么是抽象類
通過上文已經知道了什么是抽象方法,那么抽象類的定義其實也很好理解,當一個類的里面有一個方法是抽象方法的時候,我們定義這個類就是抽象類。同時抽象類也是需要使用“abstract
”關鍵字來修飾的,在抽象類里面可以有不是抽象方法的成員屬性,但是一旦有一個方法是抽象方法,那這個類就是抽象類。
其中需要注意的是,抽象類的成員方法并不全是抽象方法,哪些不是抽象方法的成員方法和屬性訪問權限不能是private
,抽象類中的方法也是需要被子類繼承的。
下面給大家實例看一下:
abstract class demo{ var $test; abstract function fun1(); abstract function fun2(); }
抽象類的特點
抽象類和抽象方法都需要用abstract修飾;
抽象方法必須在抽象類中,抽象類中可以沒有抽象方法;
抽象類不能直接創造對象(實例化);
抽象類的子類如果重寫所有抽象方法,那么就是一個具體的類;抽象類的子類不重寫所有抽象方法,那么子類還是一個抽象類;
抽象類中含有不能被實現的抽象方法,就表示抽象類不能被實例化,那就創建不了對象,因此我們無法直接使用它。那既然無法直接使用它,我們使用抽象類能夠解決什么問題呢?
接下來我們通過實例來看一下,定義一個抽象類,然后使用另一個類來繼承這個抽象類并實現抽象類中的抽象方法。
示例如下:
<?php abstract class father{ public $study = '好好學習<br>'; public $study1 = '天天向上<br>'; abstract function title(); abstract function output(); } class Demo extends father{ public function title(){ echo '福如東海,壽比南山。'; } public function output(){ echo $this -> study.$this -> study1; } } $obj = new Demo(); $obj -> output(); $obj -> title(); ?>
輸出結果:
由上述實例,我們實現了定義一個抽象類,然后使用另一個類來繼承這個抽象類并實現抽象類中的抽象方法。
就像上文說的,前面的文章中講到了PHP接口的相關知識,里面說道可以把接口理解成一個特殊的抽象類,那么既然特殊的話PHP接口和抽象類有什么區別和相同點呢?下面我們就來盤點一下。這里推薦大家可以先看《五分鐘帶你看PHP中的接口interface聲明與應用(實例詳解)》其中介紹了PHP接口。
PHP接口和抽象類的區別
抽象類可以有屬性、普通方法、抽象方法,但接口不能有屬性、普通方法、可以有常量。
抽象類內未必有抽象方法,但接口內一定會有“抽象”方法。
抽象類用abstract關鍵字在類前聲明,且有class聲明為類,接口是用interface來聲明,但不能用class來聲明,因為接口不是類。
抽象類是用extends關鍵字讓子類繼承父類后,在子類實現詳細的抽象方法。而接口則是用implements讓普通類在類里實現接口的詳細方法,且接口可以一次性實現多個方法,用逗號分開各個接口就可。
PHP接口和抽象類的相同點
都是用于聲明某一種事物,規范名稱、參數,形成模塊,未有詳細的實現細節。
都是通過類來實現相關的細節工作。
語法上,抽象類的抽象方法與接口一樣,不能有方法體,即{}符號。
都可以用繼承,接口可以繼承接口形成新的接口,抽象類可以繼承抽象類從而形成新的抽象類。
“如何理解PHP抽象類和抽象方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。