与PHP中的fopen
相比,使用SplFileObject
的优缺点是什么?
据我所知,SplFileObject
在适用的情况下会引发异常,这使得在使用try...catch
进行错误处理时非常方便。除此之外,还有其他理由推荐另一个吗?
(奖金:为什么叫SplFileObject
?Spl
代表什么?为什么不简单地称为FileObject
?)
更新: SplFileObject
的一个限制是(尚未)没有close
成员函数。在某些情况下,这可能是个问题(示例:Unlink and SplFileObject)。
最佳答案
SPL代表标准PHP库。SplFileObject
在内部使用由fopen
创建的流资源。因此,您的问题应该是何时使用SplFileObject
或直接使用流资源有趣吗?SplFileObject
优点:
SplFileObject
提供了一种OOP方法来处理文件(在PHP 5.5.11中添加了fread
,在PHP 5.4中添加了fputcsv
)。 SplFileObject
实现了几个有用的PHP接口(interface),使其他SPL Iterator的使用可以更好地操纵您的文件。 SplFileObject
的主要缺点是它无法访问其内部流资源。 PHP函数最初是为直接与流资源一起使用而构建的。
SplFileObject
不能访问其自己的内部流资源这一事实使它无法用于许多内置于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
关于php - SplFileObject vs PHP中的fopen,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11850726/