久久精品国产99国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

接口 - PHP面向對象編程(OOP)

PHP中關于接口的定義和使用方法

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

接口是通過?interface?關鍵字來定義的,就像定義一個標準的類一樣,但其中定義所有的方法都是空的。

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

什么時候使用接口?

  • 因為實現了同一個接口,所以開發者創建的對象雖然源自不同的類,但可能可以交換使用。 常用于多個數據庫的服務訪問、多個支付網關、不同的緩存策略等。 可能不需要任何代碼修改,就能切換不同的實現方式。
  • 能夠讓函數與方法接受一個符合接口的參數,而不需要關心對象如何做、如何實現。 這些接口常常命名成類似?IterableCacheableRenderable, 以便于體現出功能的含義。

PHP中的抽象類與接口有啥區別?

常量

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

接口的實現

要實現一個接口,使用?implements?操作符。類中必須實現接口中定義的所有方法,否則會報一個致命錯誤。

類可以實現多個接口,用逗號來分隔多個接口的名稱。

<?php

// 聲明一個'iTemplate'接口
interface iTemplate
{
    public function setVariable($name, $var);
    public function getHtml($template);
}


// 實現接口
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;
    }
}

特征:

  1. 可以指定某個類必須實現哪些方法,但不需要定義這些方法的具體內容。
  2. 就像定義一個標準的類一樣,但其中定義所有的方法都是空的。
  3. 接口中定義的所有方法都必須是public(公有),這是接口的特性。
  4. 類中必須實現接口中定義的所有方法,否則會報一個致命錯誤。
  5. 類可以實現多個接口,用逗號來分隔多個接口的名稱。
  6. 類要實現接口,必須使用和接口中所定義的方法完全一致的方式。否則會導致致命錯誤
  7. 接口也可以繼承,可以通過?extends?操作符擴展。讓一個接口繼承另一個接口,即常用的繼承(擴展新抽象方法),無覆蓋的關系
  8. 接口中也可以定義常量。接口常量和類常量的使用完全相同,但是不能被子類或子接口所覆蓋
  9. 接口中的成員屬性,必須是常量(不能有變量)
  10. 可以使用一個類來實現接口中全部方法,也可以使用一個抽象類,來實現接口中的部分方法
  11. 一個類可以在繼承另一個類的同時,使用implements實現一個接口,也可以實現多個接口(一定要先繼承,再實現接口)

注意:

  • 由于接口(interface)和類(class)、trait 共享了命名空間,所以它們不能重名。
  • 接口中的方法,必須全部是抽象方法,所以接口中的抽象方法不需要使用abstract關鍵字,直接用分號結束即可
  • 接口可以定義魔術方法,以便要求類(class)實現這些方法。
  • 雖然沒有禁止,但是強烈建議不要在接口中使用?構造器。 因為這樣在對象實現接口時,會大幅降低靈活性。 此外,也不能強制確保構造器遵守繼承規則,將導致不可預料的行為結果。
  • 類實現接口時,必須以兼容的簽名定義接口中所有方法。
  • 接口加上類型約束,提供了一種很好的方式來確保某個對象包含有某些方法。參見?instanceof?操作符和類型聲明

面向接口開發

接口,實際上也可以看做是一種契約。我們經常會拿電腦主機箱后面的插口來說明。比如USB接口,我們定義了它的大小,里面的線路格式,不管你插進來的是什么,我們都可以連通。而具體的實現則是取決于電腦軟件對插入的硬件的解釋,比如U盤就會去讀取它里面的內容,而鍵盤則會識別為一個外設。

從這里可以看出,接口能夠為我們程序的擴展提供非常強大的支撐。任何面向對象語言中接口都是非常重要的特性。

可擴充(繼承?)的接口

<?php
interface A
{
    public function foo();
}

interface B extends A
{
    public function baz(Baz $baz);
}

// 正確寫法
class C implements B
{
    public function foo()
    {
    }

    public function baz(Baz $baz)
    {
    }
}

// 錯誤寫法會導致一個致命錯誤
class D implements B
{
    public function foo()
    {
    }
    //無法檢查 D::baz(Foo $foo) 和 B::baz(Baz $baz) 之間的兼容性,因為 Baz 類在代碼中不可用

    //未實現接口B的方法
    public function baz(Foo $foo)
    {
    }
}
?>

PHP中的函數和方法之間有什么區別?

擴展多個接口

<?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()
    {
    }
}
?>

使用接口常量

<?php
interface A
{
    const B = 'Interface constant';
}

// 輸出接口常量
echo A::B;

// 錯誤寫法,因為常量不能被覆蓋。接口常量的概念和類常量是一樣的。
class B implements A
{
    const B = 'Class constant';
}

// 輸出: Class constant
// 在 PHP 8.1.0 之前,不能正常運行
// 因為之前還不允許覆蓋類常量。
echo B::B;
?>

抽象(abstract)類的接口使用

<?php
interface A
{
    public function foo(string $s): string;

    public function bar(int $i): int;
}

// 抽象類可能僅實現了接口的一部分。
// 擴展該抽象類時必須實現剩余部分。
abstract class B implements A
{
    public function foo(string $s): string
    {
        return $s . PHP_EOL;
    }
}

class C extends B
{
    public function bar(int $i): int
    {
        return $i * 2;
    }
}
?>

同時使用擴展和實現

<?php

class One
{
    /* ... */
}

interface Usable
{
    /* ... */
}

interface Updatable
{
    /* ... */
}

// 關鍵詞順序至關重要: 'extends' 必須在前面
class Two extends One implements Usable, Updatable
{
    /* ... */
}
?>

參考文章

給TA贊賞
共{{data.count}}人
人已贊賞
??
Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
?
購物車
優惠劵
搜索
久久精品国产99国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

    9000px;">

      欧美综合一区二区| 久久人人97超碰com| 国产日本欧美一区二区| 国产精品主播直播| 国产精品乱码妇女bbbb| 国产成人av自拍| 美女视频一区二区| 欧美电影在哪看比较好| 成人午夜av在线| 91网站最新网址| 欧美性极品少妇| 最新热久久免费视频| 国产另类ts人妖一区二区| 精品久久久久一区| 色欧美片视频在线观看在线视频| 欧美一区二区观看视频| 国产在线精品一区二区| 日韩理论片中文av| 欧美一级免费大片| 国产大陆精品国产| 日韩电影在线观看一区| 欧美经典一区二区三区| 91黄色免费版| 国产成人精品综合在线观看| 一区二区在线观看免费视频播放| 欧美va亚洲va在线观看蝴蝶网| 国产91露脸合集magnet| 亚洲国产欧美另类丝袜| 国产精品色一区二区三区| 欧美色国产精品| 成人免费高清视频在线观看| 香蕉成人伊视频在线观看| 国产无人区一区二区三区| 在线免费观看视频一区| 国产一区二区女| 蜜臀av一区二区三区| 亚洲乱码国产乱码精品精的特点| 26uuu精品一区二区| 欧美男女性生活在线直播观看| 成人免费观看视频| 国产露脸91国语对白| 麻豆精品在线看| 亚洲h动漫在线| 亚洲精品乱码久久久久久日本蜜臀| 久久午夜羞羞影院免费观看| 日韩欧美激情四射| 51午夜精品国产| 欧美日本在线看| 欧美视频精品在线观看| 96av麻豆蜜桃一区二区| 成人高清视频在线| 丁香天五香天堂综合| 国产高清精品网站| 成人免费电影视频| 成人永久免费视频| 不卡av电影在线播放| 国产成人免费视频网站| 成人午夜在线播放| 国产sm精品调教视频网站| 国产成人aaaa| 成人综合婷婷国产精品久久免费| 国产高清无密码一区二区三区| 国产成人综合在线播放| 国产不卡免费视频| 丁香婷婷深情五月亚洲| 99久久精品国产一区| 色综合久久久久网| 欧美午夜片在线看| 欧美精品v国产精品v日韩精品| 制服丝袜激情欧洲亚洲| 日韩精品一区二区三区三区免费| 精品日韩在线一区| 久久久高清一区二区三区| 国产精品久久久久婷婷二区次| 日韩一区日韩二区| 日本美女一区二区三区| 国产一区二区在线视频| 不卡的av中国片| 欧美日精品一区视频| 欧美一级高清大全免费观看| 精品欧美一区二区在线观看| 国产日产精品一区| 亚洲国产欧美在线| 韩国成人精品a∨在线观看| jlzzjlzz亚洲日本少妇| 7777精品伊人久久久大香线蕉经典版下载| 日韩小视频在线观看专区| 国产精品美女久久福利网站| 亚洲高清不卡在线观看| 国产成人啪免费观看软件| 欧美性一区二区| 国产日产欧美一区二区三区 | 国产精品少妇自拍| 天天色综合天天| 国产福利一区在线| 欧美精品久久99久久在免费线| 久久综合一区二区| 一区二区三区四区不卡在线| 国产在线麻豆精品观看| 91九色02白丝porn| 久久精品一区二区三区不卡牛牛 | 在线一区二区三区做爰视频网站| 在线亚洲免费视频| 国产拍欧美日韩视频二区| 一区二区三区丝袜| www.爱久久.com| 精品久久久久久久久久久久久久久久久 | 欧美精品在线一区二区三区| 911精品国产一区二区在线| 国产欧美一区在线| 日本特黄久久久高潮| 视频一区二区三区中文字幕| 91麻豆免费视频| 亚洲欧洲三级电影| 国产麻豆视频精品| 欧美一区二区视频在线观看2022| 综合在线观看色| 风流少妇一区二区| 久久色.com| 免费欧美日韩国产三级电影| 91福利视频在线| 国产精品久久久久四虎| 不卡一区在线观看| 中文字幕高清不卡| 高清不卡在线观看| 国产精品久久久久久久久免费丝袜 | 91美女福利视频| 国产精品丝袜久久久久久app| 狠狠色2019综合网| 国产亚洲一区二区三区在线观看| 精品一区二区久久| 2022国产精品视频| 精品一区二区日韩| 国产精品美女久久久久久久| 99久久精品费精品国产一区二区| 综合久久给合久久狠狠狠97色 | 精品国产一区久久| 国产精品888| 亚洲男同性视频| 欧美日韩精品一区二区| 麻豆中文一区二区| 26uuu色噜噜精品一区| 国产美女精品人人做人人爽 | 久久精品国产久精国产爱| 精品精品国产高清一毛片一天堂| 蜜桃视频在线观看一区| 国产午夜亚洲精品不卡| 波多野结衣一区二区三区| 亚洲欧美成人一区二区三区| 欧美精品久久久久久久多人混战| 蜜桃视频免费观看一区| 国产精品毛片a∨一区二区三区| 91丨九色porny丨蝌蚪| 日韩电影在线一区二区| 亚洲精品一区二区在线观看| 91蜜桃在线免费视频| 午夜亚洲福利老司机| 国产无一区二区| 欧美精品v国产精品v日韩精品 | 国产欧美一区二区精品秋霞影院| av网站免费线看精品| 亚洲一区二区高清| 精品裸体舞一区二区三区| eeuss鲁一区二区三区| 日产国产高清一区二区三区 | 欧美国产禁国产网站cc| 欧美日本一区二区在线观看| 国产一区二区三区在线观看免费| 亚洲精品v日韩精品| 欧美电影免费观看高清完整版在| 91原创在线视频| 国产在线不卡一卡二卡三卡四卡| 亚洲综合视频在线| 国产精品毛片无遮挡高清| 欧美一区二区三区播放老司机| 成人黄色免费短视频| 日本麻豆一区二区三区视频| 亚洲精品综合在线| 久久精品一区二区三区不卡| 欧美一区二区在线观看| 99国产精品久久久久久久久久久| 国产综合久久久久久久久久久久| 亚洲午夜久久久久久久久久久| 亚洲国产精品ⅴa在线观看| 日韩欧美精品在线视频| 欧美在线制服丝袜| 色狠狠av一区二区三区| 成人妖精视频yjsp地址| 国产一级精品在线| 狠狠色综合播放一区二区| 日韩精品1区2区3区| 一区二区三区美女视频| 亚洲欧美一区二区在线观看| 久久久久久免费网| 日韩欧美国产一区在线观看| 69p69国产精品| 欧美日韩美女一区二区| 欧美三级韩国三级日本一级| 欧美综合在线视频| 欧美手机在线视频|