dhii / io-resource-interface
资源互操作接口
dev-develop
2017-10-01 20:27 UTC
Requires
- php: ^5.3 | ^7.0
- dhii/exception-interface: dev-release/0.1
Requires (Dev)
- codeclimate/php-test-reporter: <=0.3.2
- dhii/php-cs-fixer-config: dev-php-5.3
- phpunit/phpunit: ^4.8
- ptrofimov/xpmock: ^1.1
This package is auto-updated.
Last update: 2024-09-07 03:28:50 UTC
README
资源互操作接口。
详细信息
本包旨在实现以下主要目标
- 提供一种独立于 PSR-7 的流互操作性标准。PSR-7 标准庞大且难以处理,我们认为流的概念与 HTTP 消息是分离的,因为许多输入和输出的消费者并不关心或需要关心输入或输出的指向。例如,
stdout
与 HTTP 或网络本身无关。相反,应使用可互操作的流来写入或读取数据,而不管来源或目标。 - 恢复 ISP 流互操作标准。PSR-7 标准将流的许多功能聚合在一个大接口中。这是非 SOLID 的,因为消费者可能只想向流写入,而流甚至可能不可读;反之亦然。同时,使用 ISP,可以使用
instanceof
操作符来检测流的属性,这是干净的,我们认为这是更正确的。 - 与现有的 Dhii 标准保持兼容。因此,流转换为字符串的能力被正式化,这意味着可以在期望 stringable 值的地方提供可读流,这非常方便。
- 抽象“资源”的概念。所有流在广义上都是资源,但并非所有资源都是流。资源对象可以允许写入内存中的变量,而不仅仅是实际的流或文件。数据库连接也可以是资源,人们可以通过写入此类资源来执行查询。
兼容性
此包中的接口主要与 PSR-7 中定义的 StreamInterface
接口兼容,尽管将其分割成更独立的部分。一个主要区别是 ReadableResourceInterface#__toString()
不需要将资源指针移至开头,但可能只返回内容的剩余部分。这主要是因为定位能力与读取能力是分开的。如果实现希望与 StreamInterface#__toString()
的行为兼容,则鼓励检测可定位性并在可能的情况下执行重置。
接口
ResourceInterface
- 所有资源的基接口。意味着任何资源都可以确定它是否打开,可以显式关闭,隐式打开,并尝试确定其大小。ReadableResourceInterface
- 可从其中读取的资源。意味着可以读取其全部内容或部分内容,并确定是否还有更多数据。WritableResourceInterface
- 可写入的资源。意味着可以写入一系列字节。ResourceAwareInterface
- 可以检索资源的东西。ResourceExceptionInterface
- 与资源相关的异常。CouldNotReadExceptionInterface
- 当可读资源无法读取时发生的异常。CouldNotWriteExceptionInterface
- 当可写资源无法写入时发生的异常。