提问人:mario 提问时间:10/14/2010 更新时间:7/8/2014 访问量:1612
使用 fread 方法扩展 SplFileObject
extend SplFileObject with fread method
问:
PHP5 引入了一个面向对象的文件包装器 SplFileObject。我想我刚刚发现为什么几乎没有人使用它。它纯粹是面向行的,没有 fread() 方法 - 相应的 frwite 似乎暗示了这一点。
所以现在我想知道我是否可以扩展它。但是,我不确定什么是更好的解决方法。SplFileObject 在隐藏文件指针 ($fp) 方面并不是特别有用 - 它要么是私有属性,要么是 ZE 内部资源。那么我该如何扩展它以获得 fread 方法呢?
- 使用 fgets() 将 fread() 实现为字符串收集循环,如果只请求特定大小并且 fgets 读取得太远,直到下一个 \n 换行符,则最终会进行搜索。
- 使用自定义构造函数,该构造函数会再次打开文件并存储辅助文件指针,以防我想调用 fread() 而不是父类方法。
我会选择fget变通循环,但它听起来很麻烦和缓慢,并且提供了更多潜在的陷阱。OTOH 打开辅助文件指针似乎也不是一个好方法,也需要自定义析构函数。
答:
5赞
Artefacto
10/14/2010
#1
您可以调用 extend it 并添加一个方法,该方法重复调用该方法,达到所需的次数。fread
fgetc
也就是说,我同意这是一个奇怪的限制。提交功能请求。如果我没有遗漏什么,就应该实施方法。fread
评论
0赞
mario
10/14/2010
是的,我想 fgets 解决方法是更好的方法。- 在 php.net 上确实发现了一个未解决的错误/功能请求,一些关于 2006 年的想法,似乎没有实际的计划来添加它。SplBinaryFileObject
2赞
W4cko
7/8/2014
#2
PHP5.6 新增功能
.添加了功能 #65545 (SplFileObject::fread()) (Tjerk)
评论
fread()
file_get_contents($this->getPathname());
fread