本文實(shí)例講述了PHP中抽象類(lèi),接口功能、定義方法。分享給大家供大家參考,具體如下:
這里先介紹接口,因?yàn)樵谖易罱吹暮脦妆緋hp工具書(shū)中都沒(méi)有提到抽象類(lèi)。
本人也覺(jué)得,在理解了接口后抽象類(lèi)也非常好理解。
例子代碼隨便寫(xiě)了一下。例子代碼是很ok的,測(cè)試過(guò)了不會(huì)報(bào)錯(cuò),懶得看代碼的筒靴們看文字一樣。栗子舉的不好。
代碼測(cè)試環(huán)境:php5.3.29
接口(interface):
接口就是為抽象而生的,相當(dāng)于一個(gè)約定或規(guī)范,方便框架搭建,代碼分工。
它里面指定了抽象方法的名稱(chēng)和參數(shù)和成員常量,但不能包含任何的具體方法,變量.
個(gè)人認(rèn)為php是弱類(lèi)型語(yǔ)言,強(qiáng)調(diào)的是靈活性。與java相比php里的接口對(duì)類(lèi)型要求太松弛。不大好用,不推薦大量使用。
-
1)接口中全部是抽象方法。(因?yàn)橐脕?lái)給子類(lèi)實(shí)現(xiàn)。所以都要是
public
或protected
的。) - 2)接口中不能有具體方法,且只能有成員常量。
- 3) 由于php和java c++等強(qiáng)類(lèi)型語(yǔ)言不同,php是弱類(lèi)型且動(dòng)態(tài)類(lèi)型的本身就不指定返回類(lèi)型,參數(shù)的數(shù)據(jù)類(lèi)型除四種基本類(lèi)型不能指定外也可寫(xiě)可不寫(xiě),所以對(duì)方法返回值和參數(shù)的類(lèi)型無(wú)要求。
-
4)一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口。用法:
implements
關(guān)鍵字后實(shí)現(xiàn)多個(gè)接口用逗號(hào)隔開(kāi)。
interface Car { const name = "車(chē)子"; public function run($speed=400,$time=300); } class Xiali implements Car { public function run($s=100,$t=200){//參數(shù)個(gè)數(shù)必須相同 echo '哈哈 我會(huì)跑'; return 'abc'; } public function fly() { echo '哈哈我會(huì)飛'; } }
抽象類(lèi)(abstract class):
作用和接口一樣,都是為了規(guī)范子類(lèi)的功能,只是比接口多包含了具體的內(nèi)容。
1)包含至少一個(gè)抽象方法(abstract function)的類(lèi)(換言之,任何類(lèi)只要有了一個(gè)或以上的抽象方法,這個(gè)類(lèi)就必須是抽象類(lèi)。)
2)抽象類(lèi)和接口一樣不能實(shí)例化。都叫抽象的了,還咋實(shí)例化,實(shí)例都是具體的。2333.
3)小結(jié):抽象類(lèi)和普通類(lèi)倆區(qū)別:1.至少包含一個(gè)抽象方法 2.不能實(shí)例化。別的都一樣。
4)用法:
abstract class Father{ abstract function func1();//至少一個(gè)抽象方法。 public function func2(){//具體方法隨便寫(xiě)。 echo 'func2'; $this->func3(); } private function func3(){ echo '一個(gè)private方法'; } }
實(shí)現(xiàn)繼承到的抽象方法時(shí)
/** * 繼承抽象類(lèi) * 必須實(shí)現(xiàn)其所有抽象方法 * 和普通一樣,一個(gè)類(lèi)也只能繼承一個(gè)抽象類(lèi) */ class Son extends Father { public function func1() { echo '實(shí)現(xiàn)(重寫(xiě))抽象方法。參數(shù)名個(gè)數(shù)必須相同' } }
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。