摘要:舉個來說明接口的作用。定義如下在未來的業務開發中,我們不必關心具體的的獲取場景,只需要確定,這個實現了這個接口,擁有這兩個方法即可。實現了業務細節和整體架構抽象的解耦。舉個例子再舉個例子再舉個例子使用方法參考
舉個Demo來說明接口的作用。
有這么一個類。
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(); }
在未來的業務開發中,我們不必關心具體的Document的獲取場景,只需要確定,這個Document實現了這個接口,擁有這兩個方法即可。實現了業務細節和整體架構抽象的解耦。
舉個例子:
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); // opt etc $html = curl_exec($ch); curl_close($ch); return $htl; } }
再舉個例子:
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); } }
使用方法:
addDocument($htmlDoc); $streamDoc = new StreamDocument(fopen("stream.txt", "rb")); $streamDoc->addDocument($streamDoc); $cmdDoc = new CommandOutputDocument("cat /etc/hosts"); $documentStore->addDocument($cmdDoc); print_r($documentStore->getDocuments());
參考:
Modern PHP
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/21652.html
摘要:繼上一篇面試常考內容之面向對象發表后,今天更新,需要的可以直接點擊文字進行跳轉獲取。析構函數,當對象被銷毀時調用。 PHP面試專欄正式起更,每周一、三、五更新,提供最好最優質的PHP面試內容。繼上一篇PHP面試常考內容之面向對象(1)發表后,今天更新(2),需要(1)的可以直接點擊文字進行跳轉獲取。整個面向對象文章的結構涉及的內容模塊有: 一、面向對象與面向過程有什么區別?二、面向對...
摘要:如何構建一個自己的框架為什么我們要去構建一個自己的框架可能絕大多數的人都會說市面上已經那么多的框架了,還造什么輪子。 showImg(https://segmentfault.com/img/bVNg9F?w=500&h=500); 如何構建一個自己的PHP框架 為什么我們要去構建一個自己的PHP框架?可能絕大多數的人都會說市面上已經那么多的框架了,還造什么輪子?。我的觀點造輪子不是目...
摘要:做為公司的一名技術,每天會碰到很多新手朋友咨詢有關短信接口開發的問題,下面就以語言為例為大家介紹下短信接口如何開發。閱讀樂信短信接口示例。二主體協議發送短信發送普通短信調用此方法,可單個或批量發送。 做為公司的一名技術,每天會碰到很多新手朋友咨詢有關短信接口開發的問題,下面就以php語言為例為大家介紹下短信接口如何開發。 一、接口說明 1、提交方式與編碼 http請求都應以POST...
kewail接口短信平臺提供完備狀態查詢,支持狀態接口短信api推送詳盡的在線接口文檔,隨時查閱,不斷更新標準HTTP接口,提供多種語言示例 (PHPJAVAC#NODEPYTHON等)支持多種返回格式 JSON/XML// Works well with php5.3and php5.6.namespace KewailSms;class SmsSenderUtil {functiongetRa...
摘要:如果還不知道如何簽約,請查看支付寶即時到帳簽約教程完成簽約后,需要把項目導入自己的項目中安裝方法,請參考項目簡介。跳轉支付寶通過上一步返回的是請求支付寶的。本次支付寶的即時到帳接口到這里就完成了調用。 payment 項目2.0版本 特別聲明: 以下文檔均針對 payment 2.0 以上版本,并且PHP需要5.5以上(含)。代碼中所有編碼均使用 utf-8 。 通過幾天的時間,終于...
閱讀 1487·2021-10-14 09:43
閱讀 1453·2021-10-09 09:58
閱讀 1946·2021-09-28 09:42
閱讀 3737·2021-09-26 09:55
閱讀 1763·2021-08-27 16:23
閱讀 2765·2021-08-23 09:46
閱讀 915·2019-08-30 15:55
閱讀 1432·2019-08-30 15:54