使用fread方法扩展SplFileObject

时间:2010-10-13 21:05:30

标签: php

PHP5引入了面向对象的文件包装器 SplFileObject 。我想我刚刚发现为什么几乎没有人使用它。它纯粹是面向行的,没有fread()方法 - 相应的frwite似乎暗示了这一点。

所以现在我想知道我是否可以扩展它。但我不确定什么是更好的解决方法。将文件指针($ fp)折叠起来时,SplFileObject并不是特别有用 - 它可以是私有属性,也可以是ZE内部资源。那么我如何扩展它以获得一个fread方法?

  • 将fread()实现为字符串,使用fgets()收集循环,最终搜索是否只请求特定大小并且fgets读取太长时间直到下一行\ n换行。
  • 使用自定义构造函数,它会再次打开文件并存储辅助文件指针,以防我想调用fread()而不是父类方法。

我会选择fgets解决方案循环,但听起来既麻烦又缓慢,并提供更多潜在的陷阱。 OTOH打开辅助文件指针似乎也不是一个好方法,也需要自定义析构函数。

2 个答案:

答案 0 :(得分:5)

您可以调用扩展它并添加一个fread方法,该方法重复调用fgetc方法,所需的次数。

那就是说,我同意这是一个奇怪的限制。提交feature request。如果我没有遗漏某些东西,那么应该实施fread方法。

答案 1 :(得分:2)

PHP5.6中添加的功能

。添加了功能#65545(SplFileObject :: fread())(Tjerk)

来自https://github.com/php/php-src/blob/php-5.6.0RC2/NEWS