摘要:嗯,剛過完,我們不在是寶寶了,來吧,擼一篇接口的文章在編程的過程中我們應該學會如何使用接口來給變我們的生活,極大的提升自我能力??墒沁@么做有什么用呢這么做的好處就是,我們可以分開定義獲取穩定的類,而且能使用十分不同的方法。
嗯,6.1剛過完,我們不在是寶寶了,來吧,擼一篇接口的文章(interface).
在編程的過程中我們應該學會如何使用接口來給變我們的生活,極大的提升自我能力。
接口不是新特性,但是非常重要,下面我們來擼個接口的小例子。
虛構一個DocumentStore的類,這個類負責從不同的資源收集文本。可以從遠程url讀取html,也可以讀取資源,也可以收集終端命令輸出。
定義DocumentStore類
class DocumentStore{ protected $data = []; public function addDocument(Documenttable $document){ $key = $document->getId(); $value = $document->getContent(); $this->data[key] = $value; } public function getDocuments(){ return $this->data; } }
既然addDocument()方法的參數只能是Documenttable的類的實例,這樣定義DocumentStore的類怎么行呢? 其實Documenttable不是類,是接口;
定義Documenttable
interface Documenttable{ public function getId(); public function getContent(); }
這個接口定義表名,實現Documenttable接口的任何對象都必須提供一個公開的getId()方法和一個公開的getContent()方法。
可是這么做有什么用呢?這么做的好處就是,我們可以分開定義獲取穩定的類,而且能使用十分不同的方法。下面是一種實現方式,這種方式使用curl從遠程url獲取html。
定義HtmlDocument類
class HtmlDocument implements Documenttable{ 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,3); curl_close($ch); return $thml; } }
下面一個方法是獲取流資源。
class StreamDocument implements Documenttable{ 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 CommandOutDocument implements Documenttable{ 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:// www.i360.me"); $documentStore->addDocument($htmlDoc); //添加流文檔 $streamDOC = new StreamDocument(fopen("stream.txt","rb")); $documentStore->addDocument($streamDOC); //添加終端命令文檔 $cmdDoc = new CommandOutDocument("cat /etc/hosts"); $documentStore->addDocument($command); print_r($documentStore->getDocuments());die;
這里HtmlDocument,StreamDocument,CommandOutDocument這三個類沒有任何共同點,只是實現了同一個接口。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/23060.html
摘要:相信大家工作中調用接口的情況很常見,有時候會有這樣的需求進入頁面需要多個接口調用結束后,才能讓用戶進行操作而這幾個接口本身并沒有先后順序的要求。最終判斷所有變量值都為。 相信大家工作中調用接口的情況很常見,有時候會有這樣的需求:進入頁面需要多個接口調用結束后,才能讓用戶進行操作!而這幾個接口本身并沒有先后順序的要求。你會怎么做? 1、儲存變量方法 因為接口調用是異步行為,所以我們可以在...
摘要:區間表示參數錯誤區間表示用戶錯誤區間表示接口異常這樣前端開發人員在得到返回值后,根據狀態碼就可以知道,大概什么錯誤,再根據相關的信息描述,可以快速定位。享學課堂特邀作者:老顧前言在移動互聯網,分布式、微服務盛行的今天,現在項目絕大部分都采用的微服務框架,前后端分離方式,(題外話:前后端的工作職責越來越明確,現在的前端都稱之為大前端,技術棧以及生態圈都已經非常成熟;以前后端人員瞧不起前端人員,...
摘要:對進行了封裝,使其支持標準注解和??梢耘c和組合使用以支持負載均衡。中使用當我們搭建好注冊中心之后,就是需要將自己的服務注冊到中,然后別的服務可以直接調用。 JAVA 項目中接口調用怎么做 ? Httpclient Okhttp Httpurlconnection RestTemplate 上面是最常見的幾種用法,我們今天要介紹的用法比上面的更簡單,方便,它就是 Feign Feig...
摘要:如何解決呢在中我們可以使用方式來干預的創建過程,來完成轉換器的指定。再也不用寫的配置文件了結束了以上就是我對如何在中優雅的使用枚舉的探索。 問題 在編碼過程中,經常會遇到用某個數值來表示某種狀態、類型或者階段的情況,比如有這樣一個枚舉: public enum ComputerState { OPEN(10), //開啟 CLOSE(11), ...
摘要:現在我就用框架來進行實戰下在實際業務中是如何優雅的使用異常的場景描述選擇一個比較簡單的業務場景,以登錄模塊為例,用戶在移動端進行登錄時,需要進行登錄,注冊,忘記密碼,獲取手機驗證碼等接口。 前言 剛開始接觸PHP的時候沒有意識到異常的重要性,有時候出問題很難精確的找到問題點,正確的處理異常也是一門學問 異常的類別 PHP7異常做了很多變動,異常類 Exception 和錯誤類 Erro...
閱讀 2055·2019-08-30 15:52
閱讀 2446·2019-08-29 18:37
閱讀 800·2019-08-29 12:33
閱讀 2846·2019-08-29 11:04
閱讀 1536·2019-08-27 10:57
閱讀 2101·2019-08-26 13:38
閱讀 2768·2019-08-26 12:25
閱讀 2455·2019-08-26 12:23