成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

什么是接口?

piapia / 1737人閱讀

摘要:接口是兩個對象之間的契約,其目的不是讓一個對象依賴另一個對象,而是依賴一個對象的能力。我們不管第三方代碼是如何實現(xiàn)接口的,只關(guān)心第三方代碼是否實現(xiàn)了指定的接口。

接口是兩個PHP對象之間的契約,其目的不是讓一個對象依賴另一個對象,而是依賴一個對象的能力。
接口把我們的代碼和依賴解耦了,而且允許我們的代碼任何實現(xiàn)了預(yù)期接口的第三方代碼。我們不管第三方代碼是如何實現(xiàn)接口的,只關(guān)心第三方代碼是否實現(xiàn)了指定的接口。


定義一個DocumentStore
作用是從不同的源收集文本:可以從遠程URL讀取HTML,也可以讀取流資源,也可以收集終端的輸出

class DocumentStore 
{
    protected $data = [];

    public function addDocument(Documentable $document)
    {
        $key   = $document->getId();
        $value = $document->getContent();
        $this->data[$key] = $value;
    }

    public function getDocuments()
    {
        return $this->data;
    }    
}

定義Documentable接口

interface Documentable
{
    public function getId();
    public function getContent();
}

這個接口的定義表明,實現(xiàn)Documentable接口的任何對象必須提供一個公開的getId()getContent()方法

這么做的用處是,我們可以分開定義獲取文檔的類,而且使用十分不同的實現(xiàn)方法

//使用curl從遠程URL獲取HTML
class HtmlDocument implements Documentable
{
    protected $url;

    public function __construct($url)
    {
        $this->url = $url;
    }

    public function getId()
    {
        return $this->url;
    }

    public function getContent()
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
        $html = curl_exec($ch);
        curl_close($ch);

        return $html;
    
//讀取資源流
class StreamDocument implements Documentable
{
    protected $resource;
    protected $buffer;

    public function __construct($resource, $buffer = 4096)
    {
        $this->resource = $resource;
        $this->buffer = $buffer;
    }

    public function getId()
    {
        return "resource-" . (int)$this->resource;
    }

    public function getContent()
    {
        $streamContent = "";
        rewind($this->resource);
        while (feof($this->resource) == false) {
            $streamContent .= fread($this->resource, $this->buffer);
        }

        return $streamContent;
    }
}
//獲取終端命令的執(zhí)行結(jié)果
class CommandOutputDocument implements Documentable
{
    protected $command;

    public function __construct($command)
    {
        $this->command = $command;
    }

    public function getId()
    {
        return $this->command;
    }

    public function getContent()
    {
        return shell_exec($this->command);
    }
}

如何借助這三種收集文檔的實現(xiàn)方法使用DocumentStore類呢?

$documentStore = new DocumentStore();

//添加HTML文檔
$htmlDoc = new HtmlDocument("https://php.net");
$documentStore->addDocument($htmlDoc);

//添加流文檔
$streamDoc = new StreamDocument("stream.txt", "rb");
$documentStore->addDocument($streamDoc);

//添加終端命令文檔
$cmdDoc = new CommandOutputDocument("cat /etc/hosts");
$documentStore->addDocument($cmdDoc);

print_r($documentStore->getDocuments());

HtmlDocument、StreamDocument、CommandOutputDocument三個類沒任何共同點,只是實現(xiàn)了一個接口

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22135.html

相關(guān)文章

  • 接口測試常見問題

    摘要:同時我們也可以使用控件來實現(xiàn)小型的接口自動化來提高接口測試效率。接口測試的流程首先我們要了解需求,熟悉業(yè)務(wù)場景然后根據(jù)需求文檔,接口文檔以及業(yè)務(wù)場景來編寫測試用例。 ...

    edgardeng 評論0 收藏0
  • 如何形成一個完整的HTML對象

    摘要:定義是一個由可以接收事件的對象實現(xiàn)的接口,并且可以為它們創(chuàng)建偵聽器。重點分割線只有通過上面的繼承關(guān)系,我們得到的元素才是一個完整的對象,我們才能為它設(shè)置獲取屬性綁定事件添加樣式類等操作。 寫在前面,本文將同步發(fā)布于Blog、掘金、segmentfault、知乎等處,如果本文對你有幫助,記得為我得到我的個人技術(shù)博客項目給個star哦。 為何寫這篇文章? 你可能做Web開發(fā)已經(jīng)有一段時間,...

    freewolf 評論0 收藏0
  • 接口測試要測試什么?

    摘要:接口測試主要用于檢測外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個子系統(tǒng)之間的交互點。二接口測試用例設(shè)計接口測試的用例設(shè)計是關(guān)鍵,不能只是單純正常請求通過就算接口測試過了,要從業(yè)務(wù)功能性能等上去設(shè)計用例。 ...

    邱勇 評論0 收藏0
  • 什么接口測試?接口測試基礎(chǔ)、案例及Json格式詳解

    摘要:什么是接口測試全稱接口是一個位于復(fù)雜系統(tǒng)之上能簡化任務(wù),像中間人一樣不需要你了解詳細的所有細節(jié)。接口測試與性能測試之間存在接口性能測試,主要通過來進行壓測。 很多小...

    WalkerXu 評論0 收藏0
  • 什么Java Marker Interface(標記接口

    摘要:而標記接口則彌補了這個功能上的缺失一個類實現(xiàn)某個沒有任何方法的標記接口,實際上標記接口從某種意義上說就成為了這個類的元數(shù)據(jù)之一。運行時,通過編程語言的反射機制,我們就可以在代碼里拿到這種元數(shù)據(jù)。之前維護元數(shù)據(jù)的重任就落在標記接口上了。 先看看什么是標記接口?標記接口有時也叫標簽接口(Tag interface),即接口不包含任何方法。在Java里很容易找到標記接口的例子,比如JDK里的...

    xiaoxiaozi 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<