面向对象的I/O设施
Requires
- php: >=5.5
Requires (Dev)
- phpunit/phpunit: ~4.8
This package is auto-updated.
Last update: 2020-02-09 03:41:22 UTC
README
EXSyst I/O组件
面向对象的I/O设施
源
源
对象(实现SourceInterface
的对象)可以用来从多个来源读取原始数据块
StringSource
可用于从字符串读取数据;StreamSource
可用于从PHP流资源读取数据,**但不提供对封装PHP流实现中大多数缺陷的保护**;如果流是可写的或双向的,它们也可以用作Sink
(下一节将详细介绍);BufferedSource
可用于包装其他源,以修复它们实现中可能存在的缺陷,并添加缺失的功能(例如,你是否已经需要过,哪怕只是一次,在套接字上向后搜索?);OuterSource
是抽象的:您可以扩展它们以在现有Source
上提供附加服务(例如,BufferedSource
和Reader
是OuterSource
)。
您可以直接从类的构造函数创建Source
,或使用Source
类的静态方法,这些方法可能提供附加服务(例如,fromStream
和fromFile
默认将StreamSource
包装在BufferedSource
中)。
Source
类还提供了静态实用方法。
汇
汇
对象(实现SinkInterface
的对象)可以用来将原始数据块写入多个汇
StringSink
可用于构建字符串(但可能比普通连接更快:注意调用开销!);SystemSink
是echo
的一个简单包装器;它是一个单例;RecordFunctionSink
可用于将数据聚合到记录中(固定大小,或由分隔符限定,可选大小限制),并将它们传递给自定义函数;- (请参阅上一节)封装可写或双向流的
StreamSource
可用于将数据写入PHP流资源; TeeSink
可用于将数据复制到多个Sink
。
与Source
类一样,Sink
类也提供了静态方法,可以用来轻松创建Sink
,以及静态实用方法。
状态
状态
对象(实现StateInterface
的对象)可以通过调用支持它的Source
上的captureState
方法来获取。它们可以用来使用restore
方法将Source
回滚到先前的位置。
如果需要回滚Source
并且它不支持该功能,您可以将Source
包装在BufferedSource
中。
读取器
读取器
对象(不实现任何特定接口,因为它们提供许多不同的服务)可以用来从Source
读取结构化数据
CDataReader
可以用于简化编写词法分析器:它们支持eat
固定字符串、包含或排除特定字符类的字符串以及空白符;StringCDataReader
是针对StringSource
优化的CDataReader
,它还支持使用preg_match
吃掉匹配正则表达式的字符串;SerializedReader
可以用来分离连接的serialize
值(如serialize($foo).serialize($bar)
),无论它们来自本地Source
(如字符串或文件流)还是远程Source
(如管道或网络流);它们被明确设计为与远程Source
高效工作;JsonReader
可以用来分离连接的 JSON(按照 RFC 7159 规定)值,条件与SerializedReader
相同。
建议使用 fromSource
静态方法创建 CDataReader
:当适用时,它将自动优先选择优化实现(如 StringCDataReader
);
Channel
;
Channel
对象(实现 ChannelInterface
的对象)可以用来通过消息与远程任务进行通信,必要时进行序列化;
SerializedChannel
使用原生 PHP 格式(使用serialize
)序列化消息;JsonChannel
使用 JSON(按照 RFC 7159 规定)序列化消息。
ChannelFactory
对象(实现 ChannelFactoryInterface
的对象)可以由应用程序或库使用来指定一个编码器/解码器对及其参数,传递给另一个库。
Selectable
;
Selectable
对象(实现 SelectableInterface
的对象)是封装 PHP 流的对象。它们可以被传递给 Selectable
类的静态方法,这些方法是面向对象的 stream_select
包装器。这些方法可以查找被任意多个 OuterSource
封装在其中的 Selectable
,并在返回时保留原始传递的对象(而不是内嵌的 Selectable
);
许多对象都是 Selectable
:所有 StreamSource
、所有 Channel
和 Selectable
类本身的对象:除了它的静态实用方法之外,它还提供了接口的裸机实现(您可以使用它,例如,将服务器套接字添加到您的集合中)。