SplFileObject vs fopen in PHP

2022-08-30 23:24:08

与PHP相比,使用和优缺点是什么?fopenSplFileObject

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

(奖励:为什么叫它?代表什么?为什么不干脆呢?SplFileObjectSplFileObject

更新:的一个限制是它(尚未)具有成员函数。在某些情况下,这可能是一个问题(例如:取消链接和SplFileObject)。SplFileObjectclose


答案 1

SPL 代表 标准 PHP 库。

SplFileObject在内部使用通过 创建的流资源。因此,您的问题应该是何时使用或直接使用流资源是否有趣?fopenSplFileObject

SplFileObject优点:

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

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

SplFileObject主要缺点是它不授予对其内部流资源的访问权限。PHP 函数最初是为直接使用流资源而构建的。事实上,不提供对其自己的内部流资源的访问权限,这使得它在许多PHP内置函数中无法使用:SplFileObject

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

  • 不能使用SplFileObjectcURL

总而言之,流资源是不可互换的。使用SplFileObject完成的任何事情都可以使用流资源和SplFileObject用户空间实现来实现,但事实并非如此SplFileObject

因此,根据用例,使用 创建的流资源可能比依赖 更好。fopenSplFileObject

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

$file = new SplFileObject('/path/to/my/file'); //the file handler is created
$file = null; //the file handler is closed

答案 2

Spl 代表 标准 PHP 库。

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

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


推荐