【问题标题】:What is the PHP equivalent of the VB class stream?VB 类流的 PHP 等价物是什么?
【发布时间】:2012-06-11 08:48:46
【问题描述】:

如本 MSDN 页面所述

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

什么是 PHP 等价物?

是否有可能完成该页面上 remarks

下列出的三件事

流涉及三个基本操作:

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

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

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

【问题讨论】:

    标签: php vb.net stream


    【解决方案1】:

    PHP streams 呢?它们几乎完全支持您正在寻找的东西。

    【讨论】:

      【解决方案2】:

      PHP 没有通用类来处理这个问题,它有一个您可能不习惯使用的数据类型 - Resource

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-23
        • 2018-10-24
        • 2017-12-22
        • 2021-11-29
        相关资源
        最近更新 更多