`

php新特性之“接口”

 
阅读更多
<?php
/**
 * 演示代码:php新特性之“接口”
 */
namespace test;
interface Documentable {
	public function getId();
	public function getContent();
}

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 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, 3);
		$html = curl_exec($ch);
		curl_close($ch);
		return $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;
	}
}


function test() {
	$document_store = new \test\DocumentStore();
	$resource = @fopen('test.txt', 'r');
	if (false === $resource) {
		exit('no suche file: test.txt');
	}
	$stream_document = new \test\StreamDocument($resource);
	$document_store->addDocument($stream_document);
	$url = 'http://www.baidu.com';
	$html_document = new \test\HtmlDocument($url);
	$document_store->addDocument($html_document);

	$data = $document_store->getDocuments();

	var_dump($data);
}

test();

 

分享到:
评论

相关推荐

    PHP接口精讲视频

    最后,接口在设计模式中的应用也是其重要价值之一。例如,策略模式、适配器模式等都会用到接口来定义行为规范,使得不同类之间可以灵活地替换和协作。 总的来说,"PHP接口精讲视频"将深入讨论这些内容,帮助你掌握...

    PHP API接口必备之输出json格式数据示例代码

    在当前的Web服务中,JSON(JavaScript Object Notation)格式由于其轻便、跨平台的特性,已经成为API接口数据交换的首选格式。 JSON格式与PHP的结合使用,需要我们掌握几个关键的函数:json_encode和json_decode。...

    聚合图床纯PHP源码 多接口

    源码的纯PHP特性意味着所有的功能都通过PHP脚本来实现,包括图片上传、处理、存储以及接口调用等。这需要开发者对PHP的数据类型、流程控制、文件操作、网络请求等有深入理解。 描述中提到的“11个接口”可能指的是...

    PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象

    这篇“PHP入门教程之面向对象的特性分析”将带你深入理解PHP的面向对象编程(OOP)概念,包括继承、多态、接口和抽象...在实际项目中,结合这些概念与其他PHP特性,如封装和类型系统,可以构建出高效且可靠的软件系统。

    api manager, php接口管理工具,php api manager工具,php api工具

    API Manager 实现了接口的版本控制,当接口发生变化时,可以轻松地创建新版本并追踪历史版本,有利于维护接口的一致性和稳定性。 4. **权限管理**: 对于多用户协作的项目,API Manager 提供了权限管理功能,可以...

    钉钉应用配置事件订阅回调接口php版demo(基于ThinkPHP5.0)

    在PHP7.0中,已经引入了一些新特性和性能提升,但同时也存在与旧版本不兼容的情况,因此选择5.0版本可以确保更广泛的兼容性。 ### 4. DingCallbackCrypto工具类 钉钉官方提供了DingCallbackCrypto工具类,用于对回...

    2024全新开发API接口调用管理系统网站源码 附教程.zip

    - "Home.php, index.php, Update.php, About.php, Ajax.php, Comment.php":这些是PHP源文件,分别对应着首页、更新、关于、异步请求、评论等功能模块。 综上所述,这个源码包提供了一个完整的API接口调用管理平台...

    PHP开发的API接口代理

    跨域接口代理是PHP API代理的一个关键特性。在Web开发中,浏览器实施同源策略,限制了JavaScript从一个源获取资源到另一个源的能力。为了克服这一限制,开发者可以使用PHP来创建一个代理服务器,该服务器接收来自...

    一次开源解析接口,风靡影视界的K哥一次解析接口

    K哥一次解析接口的开源特性,让更多的开发者有机会了解和掌握视频解析技术,促进了技术的传播和创新。同时,开源也鼓励社区的协作改进,使接口持续优化,适应不断变化的加密策略。 五、如何使用K哥解析接口 使用K...

    2023年最新内置30+远程接口全新优客API接口管理系统PHP源码

    2. **PHP 7.0-7.3**:这是目前比较稳定的PHP版本区间,相较于早期版本,在性能上有了显著提升,并且引入了许多新特性和改进,比如空合并运算符、匿名类等,这些特性使得PHP开发更加简洁高效。 3. **Nginx**:作为一...

    奇门接口实例.zip

    4. **面向对象编程**:如QimenModel类的使用,展示了PHP中的面向对象特性,包括类的定义、方法的封装以及对象的实例化。 5. **类和对象**:理解类是对象的模板,对象是类的实例,以及它们之间的关系和互动。 6. **...

    即时通讯PHP集成接口

    即时通讯PHP集成接口是一种技术方案,它允许开发者将即时通讯功能无缝地整合到他们的网站或应用程序中。这种集成的关键在于提供一个便捷的方式,使用户在使用网站服务的同时,也能享受到实时通讯带来的互动体验,...

    PHP生成小程序二维码 接口类(包括A\B\C三种接口)方法

    在微信小程序的开发过程中...总的来说,PHP生成小程序二维码的关键在于正确调用微信API,理解不同接口的特性,并将其适配到不同的PHP框架中。通过封装和抽象,我们可以轻松地在多个项目中复用这些功能,提升开发效率。

    支付宝支付微信支付接口php源码

    在IT行业中,集成第三方支付平台接口是常见的任务之一,尤其是对于电商网站和其他在线服务来说。本文将详细讨论“支付宝支付微信支付接口php源码”这一主题,包括标题和描述中涉及的知识点,以及如何利用提供的文件...

    最新PHP教程深入PHP 8特性与最佳实践.docx

    #### PHP 8的新特性 ##### 1. 联合类型 在PHP 8中引入的一个重要特性是**联合类型**。这种类型的引入允许开发者在函数参数或返回类型声明中指定多个可能的类型。这种做法不仅提高了代码的严格性,还增加了其可读性...

    全网最易部署,响应速度最快的ChatGPT环境 PHP版调用OpenAI接口进行问答和画图,采用Stream流模式通信

    本项目完全开源,是PHP版调用OpenAI的API接口进行问答的Demo,有以下特性和功能: 对PHP版本无要求,不需要数据库。核心代码只有几个文件,没用任何框架,修改调试很方便。 采用stream流模式通信,一边生成一边输出...

    最新PHP通联提现接口Demo,加测试账号,文档和最全的返回码。

    “批量提现”是支付接口中的一个重要特性,它允许商家一次性为多个用户发起提现请求,节省了处理时间。在PHP代码中,实现批量提现通常涉及到数组操作,将多个用户的提现信息打包成一个请求,然后调用通联支付的批量...

    源码_YYCMS_cms解析接口_cms_影视建站接口_php_

    自带的解析接口是系统的核心功能之一,能够自动解析来自不同影视资源站点的链接,从而为用户提供流畅的观影体验。 标签中的“YYCMS”是该系统的名称,强调了源码与这个特定的CMS框架有关。“cms解析接口”是指系统...

    钉钉开发服务器端API注册业务事件回调接口php版demo(基于ThinkPHP5)

    首先,我们需要理解钉钉开发平台的基本概念和功能,然后我们将讨论ThinkPHP5框架的核心特性,最后将介绍如何设置和使用回调接口。 钉钉开发平台是阿里巴巴集团为企业打造的一款全方位的数字化工作平台,它提供了...

Global site tag (gtag.js) - Google Analytics