SplFileObject vs fopen在PHP中

Agn*_*ian 15 php file-io spl fopen splfileobject

使用fopenSplFileObjectPHP 相反的优缺点是什么?

从我看到的,SplFileObject在适用的情况下抛出异常,这使得在使用try...catch错误处理时更方便.除此之外,还有其他理由推荐一个吗?

(额外奖励:它为什么被称为SplFileObject?代表什么Spl?为什么不简单FileObject?)

更新:它的一个限制SplFileObject是它(还)没有close成员函数.在某些情况下,这可能是一个问题(例如:Unlink和SplFileObject).

nya*_*rod 18

SPL代表标准PHP库.

SplFileObject在内部使用创建的流资源fopen.所以你的问题应该是何时使用SplFileObject或直接使用流资源?

SplFileObject 优点:

  • SplFileObject为文件操作提供OOP方法(freadPHP 5.5.11 fputcsv中添加了,在PHP 5.4中添加).

  • SplFileObject实现了几个有用的PHP接口,以便使用其他SPL Iterator来更好地操作您的文件.

SplFileObject主要缺点是它不提供对其内部流资源的访问.PHP函数最初构建为直接使用流资源.事实上,SplFileObject它不能访问自己的内部流资源,因此许多PHP内置函数无法使用它:

  • php流过滤器使用率很差SplFileObject.您需要依赖php://filter元包装器,这限制了它们的用途.

  • 使用SplFileObjectcURL是不可能的

总结一下SplFileObject,流资源不可互换.任何完成使用SplFileObject都可以使用流资源和SplFileObject用户区实现来实现,但反之则不然.

因此,根据使用情况,使用创建的流资源fopen可能是比依赖更好的选择SplFileObject.

至于close方法,你不需要一个...你只需要将处理程序设置为null来释放/关闭内部流资源.

$file = new SplFileObject('/path/to/my/file'); //the file handler is created
$file = null; //the file handler is closed
Run Code Online (Sandbox Code Playgroud)


Kry*_*cke 1

Spl 是 Php 中的一个标准库,制作了很多好东西。

使用 SplFileObject 的一个很好的理由是它使您的代码面向对象。如果需要,您可以在自己的代码库中扩展该类,并使其在使用文件时做一些不错的事情,并且已经涵盖了基础知识。