Agn*_*ian 15 php file-io spl fopen splfileobject
使用fopen与SplFileObjectPHP 相反的优缺点是什么?
从我看到的,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元包装器,这限制了它们的用途.
使用SplFileObject与cURL是不可能的
总结一下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)
Spl 是 Php 中的一个标准库,制作了很多好东西。
使用 SplFileObject 的一个很好的理由是它使您的代码面向对象。如果需要,您可以在自己的代码库中扩展该类,并使其在使用文件时做一些不错的事情,并且已经涵盖了基础知识。