¿El objeto clonado debe usar un identificador de archivo único o cada uno tiene el suyo propio?

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

  •  18-09-2019
  •  | 
  •  

Pregunta

Estoy trabajando en un contenedor que analiza un archivo de datos para una herramienta web existente.Sin embargo, estoy usando archivos de datos grandes, por lo que no puedo cargar todo en la memoria, por lo que tengo que revisarlo cargándolo en pequeños fragmentos.La herramienta web existente espera datos en un estilo similar a SimpleXML ($obj->parentnode->childnode->childnode devuelve una cadena o un objeto de nodo de algún tipo).Afortunadamente, la estructura es similar a XML pero la sintaxis es extraña.Y no puedo simplemente traducirlo a un formato sensato debido a circunstancias atenuantes.Entonces tengo que emularlo sobre la marcha.

Mientras recorro el archivo, no necesitaré analizar todo el árbol, solo los nombres de los subnodos del nodo actual.Cada nombre de subnodo y desplazamiento asociado se almacenarán en el nodo principal.Si es necesario acceder al contenido de un subnodo, se clonará el objeto del nodo principal, se actualizarán los valores de compensación y el objeto del subnodo comenzará a analizar su contenido hasta que encuentre el subnodo solicitado.

Las preguntas que tengo son:

  • Clonar el objeto del nodo principal le dará a los clones secundarios el identificador del archivo.¿Todos los clones deberían usar el mismo identificador y usar fseek para saltar por el archivo si es necesario (y ese es un si bastante grande)?
  • ¿Necesito cerrar el archivo?¿O lo cerrará la recolección de basura al final de la ejecución del script?¿A qué peligros me enfrento si no lo hago?
  • ¿Tendré que crear identificadores para cada clon o debería seguir compartiendo uno?Si es así, ¿existe un límite superior?
  • ¿Existe alguna forma de que un objeto clonado contenga una referencia al objeto original?Si acerco el identificador al destructor de objetos, probablemente no debería cerrarlo si el objeto es un clon.Y poder rastrear hacia arriba puede resultar útil, posiblemente.
¿Fue útil?

Solución

Si se implementa el método __clone se puede hacer lo que quiera cuando se clona un objeto como el establecimiento de una propiedad flaggin como un clon y el o la creación de una propiedad que posee el padre.

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top