久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

php中接口和抽象類的區(qū)別是什么

區(qū)別為:1、接口是通過(guò)interface關(guān)鍵字來(lái)定義的,抽象類是通過(guò)abstract關(guān)鍵字來(lái)定義的;2、接口沒(méi)有數(shù)據(jù)成員,但是抽象類有數(shù)據(jù)成員,抽象類可以實(shí)現(xiàn)數(shù)據(jù)的封裝;3、接口沒(méi)有構(gòu)造函數(shù),抽象類可以有構(gòu)造函數(shù)。

php中接口和抽象類的區(qū)別是什么

本教程操作環(huán)境:windows7系統(tǒng)、PHP7.1版,DELL G3電腦

1、抽象類與接口的區(qū)別

在學(xué)習(xí)PHP面向?qū)ο髸r(shí),都會(huì)在抽象類與接口上迷惑,作用差不多為什么還那么容易混淆,何不留一去一?但是事實(shí)上兩者的區(qū)別還是很大的,如果能夠很好地運(yùn)用PHP的兩個(gè)方法,面向?qū)ο蟮某绦蛟O(shè)計(jì)將會(huì)更加合理、清晰高效。

a.接口是通過(guò) interface 關(guān)鍵字來(lái)定義的, 抽象類是通過(guò)abstract關(guān)鍵字來(lái)定義的。
b.對(duì)接口的使用方式是通過(guò)關(guān)鍵字implements來(lái)實(shí)現(xiàn)的,而對(duì)于抽象類的操作是使用類繼承的關(guān)鍵字extends實(shí)現(xiàn)的,使用時(shí)要特別注意。
c.接口沒(méi)有數(shù)據(jù)成員,但是抽象類有數(shù)據(jù)成員,抽象類可以實(shí)現(xiàn)數(shù)據(jù)的封裝。
d.接口沒(méi)有構(gòu)造函數(shù),抽象類可以有構(gòu)造函數(shù)。
e.接口中的方法都是public類型,而抽象類中的方法可以使用private、protected或public來(lái)修飾。
f.一個(gè)類可以同時(shí)實(shí)現(xiàn)多個(gè)接口,但是只能實(shí)現(xiàn)一個(gè)抽象類。

相同點(diǎn):抽象方法與接口的函數(shù)體內(nèi)不能寫(xiě)任何東西,連兩個(gè)大括號(hào)都不能寫(xiě)!!!如:function getName();這樣就行了

2、接口

使用接口(interface),可以指定某個(gè)類必須實(shí)現(xiàn)哪些方法,但不需要定義這些方法的具體內(nèi)容。

接口是通過(guò) interface 關(guān)鍵字來(lái)定義的,就像定義一個(gè)標(biāo)準(zhǔn)的類一樣,但其中定義所有的方法都是空的。

接口中定義的所有方法都必須是公有,這是接口的特性。

實(shí)現(xiàn)(implements)

要實(shí)現(xiàn)一個(gè)接口,使用 implements 操作符。類中必須實(shí)現(xiàn)接口中定義的所有方法,否則會(huì)報(bào)一個(gè)致命錯(cuò)誤。類可以實(shí)現(xiàn)多個(gè)接口,用逗號(hào)來(lái)分隔多個(gè)接口的名稱。

Note:
實(shí)現(xiàn)多個(gè)接口時(shí),接口中的方法不能有重名。

Note:
接口也可以繼承,通過(guò)使用 extends 操作符。

Note:
類要實(shí)現(xiàn)接口,必須使用和接口中所定義的方法完全一致的方式。否則會(huì)導(dǎo)致致命錯(cuò)誤。

常量

接口中也可以定義常量。接口常量和類常量的使用完全相同,但是不能被子類或子接口所覆蓋。

 <?php  // 聲明一個(gè)'iTemplate'接口 interface iTemplate {     public function setVariable($name, $var);     public function getHtml($template); }   // 實(shí)現(xiàn)接口 // 下面的寫(xiě)法是正確的 class Template implements iTemplate {     private $vars = array();      public function setVariable($name, $var)     {         $this->vars[$name] = $var;     }      public function getHtml($template)     {         foreach($this->vars as $name => $value) {             $template = str_replace('{' . $name . '}', $value, $template);         }          return $template;     } }  // 下面的寫(xiě)法是錯(cuò)誤的,會(huì)報(bào)錯(cuò),因?yàn)闆](méi)有實(shí)現(xiàn) getHtml(): // Fatal error: Class BadTemplate contains 1 abstract methods // and must therefore be declared abstract (iTemplate::getHtml) class BadTemplate implements iTemplate {     private $vars = array();      public function setVariable($name, $var)     {         $this->vars[$name] = $var;     } } ?> Example #2 可擴(kuò)充的接口  <?php interface a {     public function foo(); }  interface b extends a {     public function baz(Baz $baz); }  // 正確寫(xiě)法 class c implements b {     public function foo()     {     }      public function baz(Baz $baz)     {     } }  // 錯(cuò)誤寫(xiě)法會(huì)導(dǎo)致一個(gè)致命錯(cuò)誤 class d implements b {     public function foo()     {     }      public function baz(Foo $foo)     {     } } ?> Example #3 繼承多個(gè)接口  <?php interface a {     public function foo(); }  interface b {     public function bar(); }  interface c extends a, b {     public function baz(); }  class d implements c {     public function foo()     {     }      public function bar()     {     }      public function baz()     {     } } ?> Example #4 使用接口常量  <?php interface a {     const b = 'Interface constant'; }  // 輸出接口常量 echo a::b;  // 錯(cuò)誤寫(xiě)法,因?yàn)槌A坎荒鼙桓采w。接口常量的概念和類常量是一樣的。 class b implements a {     const b = 'Class constant'; } ?>

http://php.net/manual/zh/language.oop5.interfaces.php

3、抽象類

PHP 5 支持抽象類和抽象方法。定義為抽象的類不能被實(shí)例化。任何一個(gè)類,如果它里面至少有一個(gè)方法是被聲明為抽象的,那么這個(gè)類就必須被聲明為抽象的。被定義為抽象的方法只是聲明了其調(diào)用方式(參數(shù)),不能定義其具體的功能實(shí)現(xiàn)。

繼承一個(gè)抽象類的時(shí)候,子類必須定義父類中的所有抽象方法;另外,這些方法的訪問(wèn)控制必須和父類中一樣(或者更為寬松)。例如某個(gè)抽象方法被聲明為受保護(hù)的,那么子類中實(shí)現(xiàn)的方法就應(yīng)該聲明為受保護(hù)的或者公有的,而不能定義為私有的。此外方法的調(diào)用方式必須匹配,即類型和所需參數(shù)數(shù)量必須一致。例如,子類定義了一個(gè)可選參數(shù),而父類抽象方法的聲明里沒(méi)有,則兩者的聲明并無(wú)沖突。 這也適用于 PHP 5.4 起的構(gòu)造函數(shù)。在 PHP 5.4 之前的構(gòu)造函數(shù)聲明可以不一樣的。

<?php abstract class AbstractClass {  // 強(qiáng)制要求子類定義這些方法     abstract protected function getValue();     abstract protected function prefixValue($prefix);      // 普通方法(非抽象方法)     public function printOut() {         print $this->getValue() . "n";     } }  class ConcreteClass1 extends AbstractClass {     protected function getValue() {         return "ConcreteClass1";     }      public function prefixValue($prefix) {         return "{$prefix}ConcreteClass1";     } }  class ConcreteClass2 extends AbstractClass {     public function getValue() {         return "ConcreteClass2";     }      public function prefixValue($prefix) {         return "{$prefix}ConcreteClass2";     } }  $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') ."n";  $class2 = new ConcreteClass2; $class2->printOut(); echo $class2->prefixValue('FOO_') ."n"; ?> 以上例程會(huì)輸出:  ConcreteClass1 FOO_ConcreteClass1 ConcreteClass2 FOO_ConcreteClass2 Example #2 抽象類示例  <?php abstract class AbstractClass {     // 我們的抽象方法僅需要定義需要的參數(shù)     abstract protected function prefixName($name);  }  class ConcreteClass extends AbstractClass {      // 我們的子類可以定義父類簽名中不存在的可選參數(shù)     public function prefixName($name, $separator = ".") {         if ($name == "Pacman") {             $prefix = "Mr";         } elseif ($name == "Pacwoman") {             $prefix = "Mrs";         } else {             $prefix = "";         }         return "{$prefix}{$separator} {$name}";     } }  $class = new ConcreteClass; echo $class->prefixName("Pacman"), "n"; echo $class->prefixName("Pacwoman"), "n"; ?> 以上例程會(huì)輸出:  Mr. Pacman Mrs. Pacwoman 老代碼中如果沒(méi)有自定義類或函數(shù)被命名為“abstract”,則應(yīng)該能不加修改地正常運(yùn)行。

http://php.net/manual/zh/language.oop5.abstract.php

推薦學(xué)習(xí):《PHP視頻教程》

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲电影在线| 欧美日韩视频一区二区三区| 美女福利一区二区三区| 国产专区精品| 免费一区二区三区在线视频| 日本99精品| 欧美伊人影院| 麻豆精品新av中文字幕| 精品久久中文| 国产理论在线| 亚洲国内欧美| 蘑菇福利视频一区播放| 蜜臀a∨国产成人精品| 中文字幕一区二区三区四区久久| 视频精品一区| 国产私拍福利精品视频二区| 亚洲精品福利| 日韩激情综合| 美女性感视频久久| 日韩精品诱惑一区?区三区| 色婷婷狠狠五月综合天色拍| 蜜臀国产一区| 香蕉国产精品| 日韩一二三区在线观看| 国产欧美日韩亚洲一区二区三区| 欧美激情麻豆| 色综合www| 亚洲免费网址| 日韩高清不卡一区| 久久亚洲精精品中文字幕| av高清不卡| 欧美日韩国产精品一区二区亚洲| 另类亚洲自拍| 亚洲精品美女91| 国产欧美日韩亚洲一区二区三区| 成人在线视频区| 欧美色图一区| 模特精品在线| 国产伦精品一区二区三区在线播放| 国产美女视频一区二区| 亚洲国产福利| 亚洲一区欧美二区| 国产乱码精品一区二区亚洲| аⅴ资源天堂资源库在线| 伊人久久亚洲影院| 亚洲免费一区三区| 国产一卡不卡| 成人看片网站| 日韩午夜av| 欧美亚洲三级| 亚洲va中文在线播放免费| 国产视频一区三区| 日韩av一区二区三区| 国产网站在线| 亚洲资源网站| 精品视频一区二区三区在线观看 | 亚洲欧美日韩国产综合精品二区| 日韩av中文在线观看| 特黄毛片在线观看| 视频一区中文字幕| 精品国产不卡一区二区| 亚洲免费播放| 免费一级欧美片在线观看网站 | 国产一区二区三区四区大秀| 激情欧美日韩一区| 欧美一级一区| 99久久精品网站| 日本精品在线播放| 精品理论电影在线| 亚洲精品伊人| 亚洲91视频| 国产欧美激情| 免费日韩av片| 亚洲成人不卡| 国产剧情一区二区在线观看| 国产韩日影视精品| 精品中文字幕一区二区三区| 热久久免费视频| bbw在线视频| 久久国产生活片100| 日韩一级不卡| 欧美freesex黑人又粗又大| 日韩一区精品视频| 在线一区视频观看| 久久一区精品| 日韩精品一区二区三区中文| 久久九九精品| 国产美女视频一区二区| 三级一区在线视频先锋| 欧美激情另类| 国产麻豆一区| 日本不卡一区二区三区| 好吊一区二区三区| 免费福利视频一区二区三区| 国产精选一区| 亚洲精品日本| 模特精品在线| 香蕉成人av| 精品久久久久中文字幕小说| 日韩精品第一| 亚洲一区二区av| 91久久黄色| 成人精品中文字幕| 精品无人区麻豆乱码久久久| 日韩av成人高清| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产一区清纯| 久久精品青草| 久久精品一区二区不卡| 日韩在线综合| 天堂av在线| 成人亚洲欧美| 久久久免费人体| 欧美亚洲免费| 欧美精品三级在线| 日本不卡高清| 日韩激情精品| 日本视频在线一区| 日韩精品视频网站| 亚洲制服一区| 亚洲视频国产精品| 亚洲三级网站| 婷婷综合电影| 日韩av字幕| 久久国产精品免费精品3p| 日本伊人久久| 日韩精品a在线观看91| 日韩极品在线观看| 亚洲精品乱码日韩| 青青国产91久久久久久| 日本成人手机在线| 国产亚洲欧美日韩精品一区二区三区| 日韩1区2区日韩1区2区| 欧美一区在线观看视频| 日本少妇精品亚洲第一区| 欧美久久亚洲| 久久午夜影院| 欧美成人精品三级网站| 久久国产小视频| 国产亚洲亚洲| 中文字幕日韩高清在线| 91精品国产自产在线丝袜啪| 国产精品大片| 国产精品毛片久久久| 欧美激情视频一区二区三区免费 | 精品久久久久久久| 久久毛片亚洲| 日韩精品一区二区三区免费观看| 激情综合自拍| 视频一区中文字幕国产| 日韩国产欧美在线视频| 国产精品片aa在线观看| 成人日韩av| 亚洲电影有码| 国产视频一区欧美| 日韩一二三区在线观看| 国产精品s色| 国产白浆在线免费观看| 欧洲激情综合| 天堂俺去俺来也www久久婷婷| 欧美精品国产白浆久久久久| 成人在线视频免费| 亚洲国产成人精品女人| 亚洲a级精品| 精品视频国产| 99热国内精品| 亚洲午夜国产成人| 国产精品2023| av综合电影网站| 亚洲精品一区二区在线看| 亚洲欧美日本国产| 国产极品一区| 亚洲va在线| 涩涩涩久久久成人精品| 成人在线丰满少妇av| 国产毛片久久| 久久午夜影院| 欧美资源在线| 久久三级毛片| 国产女优一区| 精品五月天堂| 老色鬼久久亚洲一区二区| 国产精品嫩草影院在线看| 成人午夜在线| 免费人成在线不卡| 老司机免费视频一区二区三区| 免费不卡中文字幕在线| 欧美日韩99| 久久久久蜜桃| 久久精品99久久久| 欧美日韩精品在线一区| 欧美视频精品全部免费观看| 久久精品二区三区| 久久精品72免费观看| 亚州av乱码久久精品蜜桃| 美女视频免费精品| 性色av一区二区怡红| 久久男人天堂| 日本特黄久久久高潮|