PHP没有通用类来处理这个问题,它有一个数据类型,您可能不会使用它 - Resource。
资源可用于保存流的文件描述符。它们广泛用于各种场合,包括文件系统描述符,网络流,维护数据库连接以及数据库结果集。它们也用于维护上下文信息,这种类型的资源是而不是的一个流,但行为更像一个数据存储。无法单独使用PHP来定义自己的资源类型,它们是底层C++代码的一部分。
在许多方面资源的行为就像一个对象的实例,最好用这种方式来思考它们(尽管它们不能被序列化或在对象之类的进程之间传递)。然而,需要注意的是,PHP是而不是面向对象的语言 - 它是一种脚本语言,它提供了许多面向对象的功能,并且忘记了这种危险。 system.io.stream提供的方法的功能在PHP中通过接受流资源作为参数的过程函数提供,并且您应该使用哪些函数取决于您正在使用的流类型。
最上游的资源类型(但不是全部 - 一个值得注意的例外是那些由sockets扩展创建)可以读出,并通过fread()
,fwrite()
等写入。该streams“扩展”(在所有新的PHP安装默认启用了很长一段时间),试图提供一个通用层来创建,访问和对各种不同类型的流进行操作,但它有它的局限性:
- 某些功能不适用于指向Windows上的标准文件描述符或外部进程的流(请参阅
stream_select()
)
- 尽管流扩展提供了套接字扩展所具有的许多功能,但它并未提供全部功能(例如多播客户端)
- 由于PHP的单线程同步特性,非阻塞多IO是ac完成PITA实施。这不是流的限制,而是PHP本身的限制。
- [已咬伤了我在过去的其他限制,其中没有我可以在那一刻想到的。如果你要处理的正确OO方式流
,你将不得不编写一个包装过程函数调用的类。
非常感谢! – Rob