摘要:举个来说明接口的作用。定义如下在未来的业务开发中,我们不必关心具体的的获取场景,只需要确定,这个实现了这个接口,拥有这两个方法即可。实现了业务细节和整体架构抽象的解耦。举个例子再举个例子再举个例子使用方法参考
举个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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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 。 通过几天的时间,终于...
阅读 1450·2021-10-14 09:43
阅读 1398·2021-10-09 09:58
阅读 1911·2021-09-28 09:42
阅读 3693·2021-09-26 09:55
阅读 1729·2021-08-27 16:23
阅读 2676·2021-08-23 09:46
阅读 886·2019-08-30 15:55
阅读 1335·2019-08-30 15:54