国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

什么是接口?

piapia / 1723人閱讀

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

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


定義一個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();
}

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

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

//使用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;
    }
}
//獲取終端命令的執行結果
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);
    }
}

如何借助這三種收集文檔的實現方法使用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());

HtmlDocumentStreamDocumentCommandOutputDocument三個類沒任何共同點,只是實現了一個接口

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22135.html

相關文章

  • 接口測試常見問題

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

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

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

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

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

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

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

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

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

    xiaoxiaozi 評論0 收藏0

發表評論

0條評論

piapia

|高級講師

TA的文章

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