久久精品国产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国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

    噜噜噜噜噜久久久久久91| 亚洲美女电影在线| 欧美日韩视频专区在线播放| 欧美一区二区三区在线视频| 在线日韩欧美视频| 国产欧美精品在线播放| 欧美日本中文| 欧美a级片网站| 久久久久久久精| 欧美影院视频| 亚洲欧美精品| 中文日韩电影网站| 亚洲精品欧美精品| 亚洲成人在线视频播放| 精品99视频| 狠狠色综合网| 狠狠做深爱婷婷久久综合一区| 国产精品美女久久久久久久| 欧美激情一区三区| 欧美精品久久99久久在免费线| 久久视频这里只有精品| 久久xxxx| 久久久国产视频91| 久久久久.com| 久久夜色精品一区| 久久先锋资源| 麻豆久久婷婷| 欧美成人首页| 欧美日韩ab| 欧美午夜精品久久久| 欧美视频在线免费看| 国产精品福利在线观看| 国产精品jvid在线观看蜜臀 | 一本久久青青| 亚洲免费播放| 亚洲影视中文字幕| 性欧美xxxx大乳国产app| 欧美一区二区视频观看视频| 久久精品国产亚洲高清剧情介绍| 欧美一二三区精品| 久久久亚洲国产天美传媒修理工 | 国产精品亚洲综合色区韩国| 国产精品视频免费观看| 国产欧美日韩麻豆91| 一区视频在线播放| 91久久在线视频| 亚洲一区二区高清视频| 久久激情视频久久| 欧美1区2区| 欧美图区在线视频| 国产曰批免费观看久久久| 亚洲国产高清自拍| 亚洲欧美一级二级三级| 久久一二三四| 国产精品久久久久久久第一福利 | 精品88久久久久88久久久| 91久久极品少妇xxxxⅹ软件| 中日韩美女免费视频网站在线观看| 亚洲欧美在线一区| 欧美激情亚洲综合一区| 国产精品综合视频| 亚洲精品日产精品乱码不卡| 欧美怡红院视频一区二区三区| 美女999久久久精品视频| 国产精品久久久久久久一区探花| 在线观看一区二区视频| 亚洲欧美日韩精品综合在线观看| 美女成人午夜| 国内在线观看一区二区三区 | 亚洲视频综合| 免费在线看一区| 国产一区二区三区四区hd| 一区二区免费看| 可以免费看不卡的av网站| 国产女主播一区二区| 一本不卡影院| 欧美精品国产精品| 一区免费观看| 久久精品成人一区二区三区蜜臀| 国产精品久久久久av免费| 亚洲精品久久久久久下一站| 久久亚洲一区二区三区四区| 国产色视频一区| 亚洲永久免费视频| 欧美日韩在线第一页| 亚洲精品欧美日韩| 欧美精品v日韩精品v韩国精品v | 男人的天堂亚洲| 激情欧美国产欧美| 久久精品国语| 极品日韩av| 免费看成人av| 亚洲黄色影片| 欧美精品一区二区三区在线播放| 亚洲国产老妈| 欧美高清视频一区| 亚洲精品欧美专区| 欧美日韩国产亚洲一区| 日韩亚洲欧美一区| 国产精品v欧美精品v日韩精品| 日韩午夜免费| 国产精品色网| 久久久99爱| 亚洲大片在线| 欧美人与禽猛交乱配| 中文在线不卡| 国产欧美日韩综合精品二区| 久久久久高清| 亚洲精品在线视频| 国产精品久久久免费| 欧美一区二区在线免费播放| 国内成+人亚洲+欧美+综合在线| 欧美在线视频免费观看| 亚洲第一色中文字幕| 欧美a级一区二区| 在线亚洲一区| 国产在线精品自拍| 欧美激情一区二区在线| 亚洲一区久久| 激情久久五月天| 欧美日韩在线观看视频| 欧美在线综合| 99国产精品99久久久久久| 国产精品久久一级| 毛片基地黄久久久久久天堂| 中文一区二区| 激情视频一区| 国产精品国产三级国产专播品爱网| 午夜久久黄色| 亚洲精品日本| 激情视频一区| 国产精品视频免费一区| 欧美成人伊人久久综合网| 午夜精品久久久99热福利| 亚洲黄色影院| 国产一区二区成人| 国产精品www色诱视频| 蜜桃av一区二区三区| 亚洲欧美激情在线视频| 亚洲日本中文字幕区| 国产热re99久久6国产精品| 欧美另类女人| 鲁大师影院一区二区三区| 午夜激情综合网| 一区二区欧美亚洲| 亚洲人成毛片在线播放女女| 国内精品美女av在线播放| 国产精品护士白丝一区av| 欧美区视频在线观看| 美女久久一区| 美国成人毛片| 巨乳诱惑日韩免费av| 欧美在线视频免费播放| 先锋影音国产一区| 亚洲一区中文| 亚洲图片欧美一区| 99在线精品免费视频九九视| 亚洲日韩第九十九页| 亚洲大胆女人| 亚洲二区视频| 亚洲高清视频一区二区| 精品成人一区二区三区四区| 国外视频精品毛片| 一区二区在线观看视频| 激情丁香综合| 亚洲国产你懂的| 亚洲黄色小视频| 99精品热6080yy久久| 正在播放欧美一区| 亚洲欧美一区二区视频| 亚洲欧美大片| 久久国产视频网| 久久综合成人精品亚洲另类欧美| 久久手机免费观看| 欧美成人免费网站| 欧美另类一区| 国产精品免费看| 国内外成人在线| 亚洲黄色免费| 一区二区三区|亚洲午夜| 亚洲午夜精品一区二区| 欧美在线亚洲在线| 欧美大胆人体视频| 欧美日韩中文在线| 国产精品一香蕉国产线看观看 | 久久国产视频网| 免费成人高清视频| 欧美视频二区36p| 国产婷婷色一区二区三区四区| 好吊成人免视频| 亚洲毛片在线看| 亚洲欧美一区二区激情| 久久久久综合网| 欧美日韩在线直播| 国内精品久久久久国产盗摄免费观看完整版| 国内视频一区| 亚洲午夜黄色| 老司机成人在线视频| 国产精品xxxxx| 在线免费观看日韩欧美|