PHP物件導向 抽象類

2021-09-05 08:59:47 字數 2280 閱讀 7214

抽象類的特點

1、php5支援抽象類和抽象方法

2、定義的抽象類無法被例項化

3、任何乙個類裡面宣告了抽象方法,那麼這個類必須宣告為抽象類, 乙個抽象類可以沒有抽象方法

4、被定義的抽象方法只能宣告其呼叫方式(引數),不能定義其具體的功能實現

5、繼承抽象類的子類必須實現父類(抽象類)所有的抽象方法,並且訪問控制(public、protected)必須一致,或者更為寬鬆 如:父類protected,子類可以protected、public。父類是public,那麼子類就只能是public,不能是protected

6、抽象類訪問控制不能定義private

7、抽象類可以定義非抽象方法

8、抽象類可以定義屬性

抽象 類實際上是就是用abstract定義的類,在抽象類中會有一些抽象的方法

抽象方法是沒有方法體的,訪問修飾符不能為private,可以是protected 和public

abstract protected function register();

在乙個方法中只要有了{}就表示該方法有方法體,不管裡面有沒有**,而沒有方法體的方法我們要定義成抽象的,因為它沒有具體的實現,所以說它是乙個抽象的

protected function register()

}$user = new userabstract();

$user->read();

exit;我們抽象的類是不能被例項化的,下面我們嘗試例項化這個抽象類,看看有什麼錯誤

這個error的意思是不能例項化乙個類 

我們的抽象類不能被例項化,那麼它有什麼用處呢

我們定義乙個子類來繼承這個抽象類,我們繼承這個抽象類時,一定要實現抽象類中的抽象方法,所以在子類中就要寫上抽象類中register()  login()這兩個方法。

我們來看一下如果子類中沒有實現register()方法會報什麼錯誤

這個錯誤的意思就是:這個classname類中包含乙個抽象方法,你必須宣告成乙個抽象類,或者實現剩下的抽象方法

1.classname類繼承了userabstract類,所以classname類中也有了兩個抽象方法,都是我們只實現了 login()這個方法,所以說classname類中還有乙個抽象方法

2.如果你的類(classname類)沒有實現抽象類『(userabstract類)中的所以抽象方法,你這個類也必須是抽象的

而在子類中還有它自己的乙個方法visit(),我們要想訪問父類中的屬性要用$this,而不是parent

在這裡我們說一下

parent  $this  self的用法

parent:呼叫父類中的方法,訪問父類中的靜態成員

self:訪問當前類常量 訪問當前類靜態成員

$this:訪問當前類或父類中非靜態成員

1.繼承抽象類的子類必須實現父類(抽象類)所有的抽象方法,並且訪問控制(public、protected)必須一致,或者更為寬鬆 如:父類protected,子類可以protected、public。父類是public,那麼子類就只能是public,不能是protected

2.抽象類訪問控制不能定義private

為什麼我們能在子類中得到value2的值這是因為我們在父類的read方法中返回了value2的值,我們在子類的visit方法中呼叫了read方法,所以我們獲取到了value2的值。

我們不止可以使用$this->read();

還可以使用parent::read(),也就是說$this->read等於parent::read();

parent它是訪問父類中的方法,不能訪問父類中的屬性,如果想訪問屬性,我們可以使用$this.

<?php 

//定義了乙個抽象類

abstract class userabstract

}//繼承抽象類,必須實現抽象類中的抽象方法

class classname extends userabstract

public function register()

public function visit()

}$obj = new classname();

$obj->login();

$obj->register();

$obj->visit();

Php物件導向 抽象類

php物件導向 抽象類 抽象類abstract 有一種類,只能被繼承,不能例項化物件。原因就是這個類的定義不完整。因為php支援定義一種,只有方法的宣告部分,而沒有方法的實現部分的不完整方法。如果某個類,包含了這種不完整的方法,就不是不完整類,也就不能例項化物件。不完整的類,稱之抽象類 所包含的不完...

PHP 物件導向 抽象類繼承抽象類

抽象類繼承另外乙個抽象類時,不用重寫其中的抽象方法。抽象類中,不能重寫抽象父類的抽象方法。這樣的用法,可以理解為對抽象類的擴充套件。下面的例子,演示了乙個抽象類繼承自另外乙個抽象類時,不需要重寫其中的抽象方法。abstract class user abstract class vipuser ex...

PHP 物件導向 抽象類繼承抽象類

抽象類繼承另外乙個抽象類時,不用重寫其中的抽象方法。抽象類中,不能重寫抽象父類的抽象方法。這樣的用法,可以理解為對抽象類的擴充套件。下面的例子,演示了乙個抽象類繼承自另外乙個抽象類時,不需要重寫其中的抽象方法。abstract class user abstract class vipuser ex...