17

与PHPfopen相比,使用的优缺点是什么?SplFileObject

据我所见,SplFileObject在适用的情况下抛出异常,这使得在try...catch用于错误处理时很方便。除此之外,还有其他理由推荐其中一个吗?

(奖励:为什么叫它SplFileObjectSpl代表什么?为什么不简单FileObject?)

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

4

3 回答 3

20

SPL 代表标准 PHP 库。

SplFileObject在内部使用创建的流资源fopen。所以你的问题应该是什么时候使用SplFileObject或直接使用流资源很有趣?

SplFileObject优点:

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

  • SplFileObject实现了几个有用的 PHP 接口,以支持使用其他SPL 迭代器来更好地操作您的文件。

SplFileObject主要缺点是它不能访问其内部流资源。PHP 函数最初是为了直接使用流资源而构建的。不提供访问其自己的内部流资源的事实SplFileObject使其无法与许多 PHP 内置函数一起使用:

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

  • 无法使用SplFileObjectwithcURL

总而言之,SplFileObject流资源是不可互换的。使用流资源和用户空间实现可以实现任何使用,但反之则不然SplFileObjectSplFileObject

因此,根据用例使用创建的流资源fopen可能是比依赖SplFileObject.

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

$file = new SplFileObject('/path/to/my/file'); //the file handler is created
$file = null; //the file handler is closed
于 2014-05-15T15:25:45.183 回答
4

Spl 代表标准 PHP 库。

主要优点是面向对象,它更适合某些方法(不是所有方法,也就是说)。如果您必须提供用于处理文件的类(如自定义格式等),这是一个不错的选择,因为您可以继承SplFileObject并拥有已经内置的基本功能。

这里的主要问题是你想用你的代码实现什么——你需要打开一个文件一次,读取它的数据然后使用它,还是你需要用一个(甚至更多)文件做更复杂的事情。

于 2012-08-07T17:25:47.737 回答
1

Spl 是 PHP 中的一个标准库,可以制作很多不错的东西。

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

于 2012-08-07T17:20:05.103 回答