`

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入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)共5页.pdf.zip

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

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

    PHP7 新特性详细介绍

    PHP 的学习新特性 最近做的项目使用了 php7,但感觉有很多新特性没有用起来。就想总结一下,一些可能会用到的新特性。之前使用的环境是 php5.4,所有也会有 php5.5 和 php5.6 的特性总结进来,这里只列出我觉得在...

    PHP高级程序设计-模式-框架-测试

    书中首先从OOP 采用的机制—— 抽象类、接口、契约式编程开始讲起,然后介绍了静态方法、单例模式、工厂模式和PHP 6 的新特性等内容,接着介绍了测试和文档方面的内容,还介绍了标准PHP 库SPL 方面的知识以及PHP ...

    php-shellcommand, 在PHP中,一个简单的面向对象的接口来执行 shell 命令.zip

    php-shellcommand, 在PHP中,一个简单的面向对象的接口来执行 shell 命令 php ShellCommand php ShellCommand提供了一个简单的面向对象接口来执行 shell 命令。特性捕获 stdOut,stdErr 和 exitCode句柄参数转义将...

    《PHP高级程序设计_模式、框架与测试》中文版PDF

    书中首先从oop采用的机制——抽象类、接口、契约式编程开始讲起,然后介绍了静态方法、单例模式、工厂模式和php 6的新特性等内容,接着介绍了测试和文档方面的内容,还介绍了标准php库spl方面的知识以及php开发人员...

    PHP5.5新特性之yield理解与用法实例分析

    本文实例讲述了PHP5.5新特性之yield理解与用法。分享给大家供大家参考,具体如下: yield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iterator 接口的方式,性能...

    PHP 对象接口简单实现方法示例

    接口中定义的所有方法都必须是公有,这是接口的特性。 实现(implements) 要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多...

    用于支付的抽象的PHP库.zip

    PDO在php5.1发行时开始附带,php之前的版本不支持用于支付的抽象的PHP库特性:(1)灵活性,可以在php运行期间,直接加载新的数据库而不需要在新的数据库使用时,重新设置和编译。(2)面向对象性:通过对象来控制...

    php权威编程

    PHP 5首席设计师Andi Gutmans,PEAR创始人Stig Saether Bakken,PHP核心贡献者Derick Rethans三大高手合力而作:本书几乎囊括了PHP 5所有的新特性,包括PHP 5所有的新功能,PHP 5的面向对象编程方法和设计模式,以及...

    追信魔盒本地开发接口 PHP

    追信API兼容追信所有平台的客户端软件,自主根据用户手机或桌面操作系统的特性选择合适的输出方式。支持TXT、XML、JSON的输出格式。 追信魔盒二次开发插件的开发者,无需关注手机平台的特殊性,根据格式输出API所需...

    实验PHP面向对象

    1.熟练掌握PHP对象的创建 2.熟练掌握PHP构造函数 与析构造函数 3. 熟练掌握PHP中封装、继承多态特性 4. 接口的使用

    php-7.0.20-nts-Win32-VC14-x64 php7.0资源下载

    在 PHP 5 中只能是类名、接口、array 或者 callable (PHP 5.4,即可以是函数,包括匿名函数),现在也可以使用 string、int、float和 bool 了。 官方示例: ? 1 2 3 4 5 6 7 &lt;?php // Coercive mode ...

    php多进程框架-模拟java多线程接口simple-fork-php.zip

    特性 提供进程池 自动处理僵尸进程回收,支持无阻塞调用 提供共享内存、System V 消息队列、Semaphore锁,方便IPC通信(进程通信) 提供Process和Runnable两种...

    我整理的PHP 7.0主要新特性

    现在来说php7的重大特性肯定已经是定型了,不会再有什么变动了。后续一些版本的迭代主要也就是修修bug,优化之类的。下面就来说话我们一直期待的php7.0新特征吧。 1.标量参数类型声明 现在支持字符串(string)、整型...

    PHP智慧酒店管理系统、app、小程序.zip

    PHP智慧酒店管理系统其主要特性包括: 入住管理 预订管理 语音提示、语音播报 房态实时图表数据 预警提示 微信api接口 短信营销 会员管理 酒店的商品管理 报表中心 财务管理 设备管理。智能门锁、读卡器、身份证识别...

    PHP高级程序设计_模式、框架与测试 PDF及源码

    书中首先从OOP 采用的机制—— 抽象类、接口、契约式编程开始讲起,然后介绍了静态方法、单例模式、工厂模式和PHP 6 的新特性等内容,接着介绍了测试和文档方面的内容,还介绍了标准PHP 库SPL 方面的知识以及PHP ...

    深入PHP 面向对象 模式与实践第3版(完整版) 35M

    首先介绍了PHP的OO特性,包括类声明、对象实例化、继承、方法与属性封装以及静态方法与属性、抽象类、接口、异常处理、对象克隆等高级主题。然后介绍了设计模式,阐述了模式的概念,展示了如何在PHP中实现几个关键的...

    PHP实现调用百度地图的功能

    百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,可帮助您在网站中构建功能丰富、交互性强的地图应用,支持PC端和移动端基于浏览器的地图应用开发,且支持HTML5特性的地图开发。

Global site tag (gtag.js) - Google Analytics