摘要:嗯,剛過完,我們不在是寶寶了,來(lái)吧,擼一篇接口的文章在編程的過程中我們應(yīng)該學(xué)會(huì)如何使用接口來(lái)給變我們的生活,極大的提升自我能力。可是這么做有什么用呢這么做的好處就是,我們可以分開定義獲取穩(wěn)定的類,而且能使用十分不同的方法。
嗯,6.1剛過完,我們不在是寶寶了,來(lái)吧,擼一篇接口的文章(interface).
在編程的過程中我們應(yīng)該學(xué)會(huì)如何使用接口來(lái)給變我們的生活,極大的提升自我能力。
接口不是新特性,但是非常重要,下面我們來(lái)擼個(gè)接口的小例子。
虛構(gòu)一個(gè)DocumentStore的類,這個(gè)類負(fù)責(zé)從不同的資源收集文本。可以從遠(yuǎn)程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()方法的參數(shù)只能是Documenttable的類的實(shí)例,這樣定義DocumentStore的類怎么行呢? 其實(shí)Documenttable不是類,是接口;
定義Documenttable
interface Documenttable{ public function getId(); public function getContent(); }
這個(gè)接口定義表名,實(shí)現(xiàn)Documenttable接口的任何對(duì)象都必須提供一個(gè)公開的getId()方法和一個(gè)公開的getContent()方法。
可是這么做有什么用呢?這么做的好處就是,我們可以分開定義獲取穩(wěn)定的類,而且能使用十分不同的方法。下面是一種實(shí)現(xiàn)方式,這種方式使用curl從遠(yuǎn)程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; } }
下面一個(gè)方法是獲取流資源。
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; } }
下面一個(gè)類是獲取終端命令行的執(zhí)行結(jié)果。
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); } }
下面我們來(lái)演示一下借助上面的三個(gè)類來(lái)實(shí)現(xiàn)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這三個(gè)類沒有任何共同點(diǎn),只是實(shí)現(xiàn)了同一個(gè)接口。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/23060.html
摘要:相信大家工作中調(diào)用接口的情況很常見,有時(shí)候會(huì)有這樣的需求進(jìn)入頁(yè)面需要多個(gè)接口調(diào)用結(jié)束后,才能讓用戶進(jìn)行操作而這幾個(gè)接口本身并沒有先后順序的要求。最終判斷所有變量值都為。 相信大家工作中調(diào)用接口的情況很常見,有時(shí)候會(huì)有這樣的需求:進(jìn)入頁(yè)面需要多個(gè)接口調(diào)用結(jié)束后,才能讓用戶進(jìn)行操作!而這幾個(gè)接口本身并沒有先后順序的要求。你會(huì)怎么做? 1、儲(chǔ)存變量方法 因?yàn)榻涌谡{(diào)用是異步行為,所以我們可以在...
摘要:區(qū)間表示參數(shù)錯(cuò)誤區(qū)間表示用戶錯(cuò)誤區(qū)間表示接口異常這樣前端開發(fā)人員在得到返回值后,根據(jù)狀態(tài)碼就可以知道,大概什么錯(cuò)誤,再根據(jù)相關(guān)的信息描述,可以快速定位。享學(xué)課堂特邀作者:老顧前言在移動(dòng)互聯(lián)網(wǎng),分布式、微服務(wù)盛行的今天,現(xiàn)在項(xiàng)目絕大部分都采用的微服務(wù)框架,前后端分離方式,(題外話:前后端的工作職責(zé)越來(lái)越明確,現(xiàn)在的前端都稱之為大前端,技術(shù)棧以及生態(tài)圈都已經(jīng)非常成熟;以前后端人員瞧不起前端人員,...
摘要:對(duì)進(jìn)行了封裝,使其支持標(biāo)準(zhǔn)注解和。可以與和組合使用以支持負(fù)載均衡。中使用當(dāng)我們搭建好注冊(cè)中心之后,就是需要將自己的服務(wù)注冊(cè)到中,然后別的服務(wù)可以直接調(diào)用。 JAVA 項(xiàng)目中接口調(diào)用怎么做 ? Httpclient Okhttp Httpurlconnection RestTemplate 上面是最常見的幾種用法,我們今天要介紹的用法比上面的更簡(jiǎn)單,方便,它就是 Feign Feig...
摘要:如何解決呢在中我們可以使用方式來(lái)干預(yù)的創(chuàng)建過程,來(lái)完成轉(zhuǎn)換器的指定。再也不用寫的配置文件了結(jié)束了以上就是我對(duì)如何在中優(yōu)雅的使用枚舉的探索。 問題 在編碼過程中,經(jīng)常會(huì)遇到用某個(gè)數(shù)值來(lái)表示某種狀態(tài)、類型或者階段的情況,比如有這樣一個(gè)枚舉: public enum ComputerState { OPEN(10), //開啟 CLOSE(11), ...
摘要:現(xiàn)在我就用框架來(lái)進(jìn)行實(shí)戰(zhàn)下在實(shí)際業(yè)務(wù)中是如何優(yōu)雅的使用異常的場(chǎng)景描述選擇一個(gè)比較簡(jiǎn)單的業(yè)務(wù)場(chǎng)景,以登錄模塊為例,用戶在移動(dòng)端進(jìn)行登錄時(shí),需要進(jìn)行登錄,注冊(cè),忘記密碼,獲取手機(jī)驗(yàn)證碼等接口。 前言 剛開始接觸PHP的時(shí)候沒有意識(shí)到異常的重要性,有時(shí)候出問題很難精確的找到問題點(diǎn),正確的處理異常也是一門學(xué)問 異常的類別 PHP7異常做了很多變動(dòng),異常類 Exception 和錯(cuò)誤類 Erro...
閱讀 2048·2019-08-30 15:52
閱讀 2440·2019-08-29 18:37
閱讀 790·2019-08-29 12:33
閱讀 2839·2019-08-29 11:04
閱讀 1523·2019-08-27 10:57
閱讀 2092·2019-08-26 13:38
閱讀 2759·2019-08-26 12:25
閱讀 2445·2019-08-26 12:23