PHP沒有通用類來處理這個問題,它有一個數據類型,您可能不會使用它 - Resource。
資源可用於保存流的文件描述符。它們廣泛用於各種場合,包括文件系統描述符,網絡流,維護數據庫連接以及數據庫結果集。它們也用於維護上下文信息,這種類型的資源是而不是的一個流,但行爲更像一個數據存儲。無法單獨使用PHP來定義自己的資源類型,它們是底層C++代碼的一部分。
在許多方面資源的行爲就像一個對象的實例,最好用這種方式來思考它們(儘管它們不能被序列化或在對象之類的進程之間傳遞)。然而,需要注意的是,PHP是而不是面向對象的語言 - 它是一種腳本語言,它提供了許多面向對象的功能,並且忘記了這種危險。 system.io.stream提供的方法的功能在PHP中通過接受流資源作爲參數的過程函數提供,並且您應該使用哪些函數取決於您正在使用的流類型。
最上游的資源類型(但不是全部 - 一個值得注意的例外是那些由sockets擴展創建)可以讀出,並通過fread()
,fwrite()
等寫入。該streams「擴展」(在所有新的PHP安裝默認啓用了很長一段時間),試圖提供一個通用層來創建,訪問和對各種不同類型的流進行操作,但它有它的侷限性:
- 某些功能不適用於指向Windows上的標準文件描述符或外部進程的流(請參閱
stream_select()
)
- 儘管流擴展提供了套接字擴展所具有的許多功能,但它並未提供全部功能(例如多播客戶端)
- 由於PHP的單線程同步特性,非阻塞多IO是ac完成PITA實施。這不是流的限制,而是PHP本身的限制。
- [已咬傷了我在過去的其他限制,其中沒有我可以在那一刻想到的。如果你要處理的正確OO方式流
,你將不得不編寫一個包裝過程函數調用的類。
非常感謝! – Rob