2

如本 MSDN 页面所述

http://msdn.microsoft.com/en-us/library/system.io.stream.aspx

什么是 PHP 等价物?

是否可以执行该页面上备注下列出的三件事

流涉及三个基本操作:

  1. 您可以从流中读取。读取是将数据从流传输到数据结构中,例如字节数组。

  2. 您可以写入流。写入是将数据从数据结构传输到流中。

  3. 流可以支持搜索。查找是查询和修改流中的当前位置。查找能力取决于流所具有的后备存储类型。例如,网络流没有统一的当前位置概念,因此通常不支持查找。

4

2 回答 2

4

PHP 流呢?他们几乎完全支持您似乎正在寻找的东西。

于 2012-06-11T08:51:34.413 回答
2

PHP 没有通用类来处理这个问题,它有一个你可能不习惯使用的数据类型——资源

资源可用于保存流的文件描述符。它们被用于各种各样的地方,包括文件系统描述符、网络流、维护数据库连接甚至数据库结果集。它们还用于维护上下文信息,这种类型的资源不是流,而是更像数据存储。仅使用 PHP 无法定义您自己的资源类型,它们是底层 C++ 代码的一部分。

在许多方面,资源的行为就像一个对象的实例,最好以这种方式来考虑它们(尽管它们不能像对象一样被序列化或在进程之间传递)。然而,重要的是要注意,PHP不是一种面向对象的语言——它是一种提供许多 OO 特性的脚本语言,忘记这一点后果自负。system.io.stream 提供的方法的功能是在 PHP 中通过接受流资源作为参数的过程函数提供的,而您应该使用哪些函数取决于您使用的流类型。

大多数流资源类型(但不是全部 - 一个值得注意的例外是由套接字扩展创建的那些)可以由 等人读取和fread()写入fwrite()。流“扩展”(在所有新的 PHP 安装默认启用很长时间)试图提供一个通用层来创建、访问和操作各种不同类型的流,但它有其局限性:

  • 某些功能不适用于指向标准文件描述符或 Windows 上的外部进程的流(请参阅 参考资料stream_select()
  • 虽然流扩展提供了套接字扩展所做的大部分功能,但它并没有提供所有功能(例如多播客户端)
  • 由于 PHP 的单线程同步特性,非阻塞多 IO 是一个完整的 PITA 来实现。这不是流的限制,而是 PHP 本身的限制。
  • 【其他过去一直困扰着我的局限,暂时想不出来】

如果您想以正确的 OO 方式处理流,则必须编写一个包装过程函数调用的类。

于 2012-06-11T09:13:27.187 回答