与PHP中的fopen相比,使用SplFileObject的优缺点是什么?

据我所知,SplFileObject在适用的情况下会引发异常,这使得在使用try...catch进行错误处理时非常方便。除此之外,还有其他理由推荐另一个吗?

(奖金:为什么叫SplFileObjectSpl代表什么?为什么不简单地称为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/

    10-11 23:12