objeto clonado deve usar único identificador de arquivo ou cada um tem a sua própria?

StackOverflow https://stackoverflow.com/questions/2002742

  •  18-09-2019
  •  | 
  •  

Pergunta

Eu estou trabalhando em um invólucro que analisa um arquivo de dados para uma ferramenta de web existente. No entanto, estou usando grandes arquivos de dados, então não posso carregar tudo na memória, por isso tenho de atravessá-la carregá-lo em pequenos pedaços. A ferramenta web existente espera de dados em um estilo semelhante ao SimpleXML ($ obj-> parentnode-> childnode-> childNode retorna uma string ou um objeto nó de algum tipo). Felizmente a estrutura é semelhante ao XML, mas a sintaxe é estranha. E eu não posso apenas traduzi-lo para um formato sane devido a circunstâncias atenuantes. Então eu tenho que imitá-lo na mosca.

Como eu ando através do arquivo Eu não vai precisar para analisar a árvore inteira, apenas os nomes sub-nó do nó atual. Cada nome de sub-nó e corretor associado irá ser armazenado no nó pai. Se o conteúdo de uma necessidade subnó para ser acessado, em seguida, o objeto pai-node será clonado, valores de deslocamento será atualizado e o objeto subnó começará analisá-lo do conteúdo até encontrar o subnó solicitado.

As perguntas que eu tenho são:

  • A clonagem do objeto nó pai vai dar clones criança o identificador de arquivo. Caso todos os clones usar o mesmo identificador e uso fseek a pular o arquivo, se necessário (e que é um grande bonita se)?
  • que eu preciso para fechar o arquivo? Ou será que a coleta de lixo no final da execução do script fechá-la? Que perigos posso enfrentar se eu não?
  • Will I necessidade de criar identificadores para cada clone, ou devo ficar com eles partilhar um? Se assim há um limite superior?
  • Existe uma maneira para um objeto clonado para manter uma referência para o objeto original? Se eu estou colocando a alça perto no objeto destruidor Eu provavelmente não deveria fechá-lo se o objeto é um clone. E ser capaz de rastrear para cima pode vir a calhar, possivelmente.
Foi útil?

Solução

Se você implementar o método __clone você pode fazer o que quiser ao clonar um objeto como definir uma propriedade flaggin-lo como um clone e ou definir uma propriedade que detém o pai.

Editar:

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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top