0

我正在开发一个为现有 Web 工具解析数据文件的包装器。但是,我正在使用大型数据文件,因此我无法将整个内容加载到内存中,因此我必须逐步将其加载到小块中。现有的 Web 工具需要类似于 SimpleXML 样式的数据($obj->parentnode->childnode->childnode 返回字符串或某种类型的节点对象)。值得庆幸的是,其结构类似于 XML,但语法很奇怪。由于情有可原,我不能把它翻译成一种理智的格式。所以我必须即时模仿它。

当我浏览文件时,我不需要解析整个树,只需解析当前节点的子节点名称。每个子节点名称和关联的偏移量都将存储在父节点中。如果需要访问子节点的内容,则将克隆父节点对象,更新偏移值,并且子节点对象将开始解析其内容,直到找到请求的子节点。

我的问题是:

  • 克隆父节点对象将为子克隆提供文件句柄。如果需要,是否所有克隆都使用相同的句柄并使用 fseek 来跳转文件(这是一个很大的如果)?
  • 我需要关闭文件吗?或者脚本执行结束时的垃圾收集会关闭它吗?如果我不这样做,我会面临什么危险?
  • 我需要为每个克隆创建句柄,还是应该坚持让它们共享一个?如果有,有上限吗?
  • 克隆对象有没有办法保存对原始对象的引用?如果我将句柄关闭在对象析构函数中,如果对象是克隆,我可能不应该关闭它。并且能够向上追踪可能会派上用场。
4

1 回答 1

0

如果您实现该__clone方法,则可以在克隆对象时做任何您想做的事情,例如将属性标记为克隆或设置包含父对象的属性。

编辑:

public function __clone()
{
  $clone = clone $this;
  $clone->isCloned = true;
  $clone->parent = $this;
  $clone->resource = $this->resource; // i dont think resources are copied be default
  // additional property transference
  return $clone;
}
于 2010-01-04T22:44:21.350 回答