objet clonée doit utiliser la poignée de fichier unique ou chacun a leur propre?

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

  •  18-09-2019
  •  | 
  •  

Question

Je travaille sur un emballage qui analyse un fichier de données pour un outil Web existant. Cependant, j'utilise des fichiers de données, donc je ne peux pas charger la chose en mémoire si je dois marcher à travers elle le charger en petits morceaux. L'outil Web existant attend des données dans un style similaire à SimpleXML ($ obj-> parentnode-> childnode-> childNode retourne une chaîne ou un objet nœud de quelque sorte). Heureusement, la structure est similaire à XML, mais la syntaxe est impair. Et je ne peux pas le traduire dans un format sain d'esprit en raison de circonstances atténuantes. Je dois donc l'imiter à la volée.

Comme je marche dans le fichier que je ne vais pas avoir besoin d'analyser l'arbre entier, seulement les noms des sous-noeud du noeud courant. Chaque nom de sous-nœud et correcteur associé seront stockés dans le nœud parent. Si le contenu d'un sous-noeud doivent être accessibles alors l'objet nœud parent sera cloné, les valeurs de décalage seront mises à jour et l'objet subnode commencera l'analyse de son contenu jusqu'à ce qu'il trouve la sous-noeud demandé.

Les questions que j'ai sont:

  • Clonage l'objet nœud parent donnera des clones de l'enfant le descripteur de fichier. Si tous les clones utilisent la même poignée et utiliser fseek pour sauter le fichier si nécessaire (et qui est un assez grand si)?
  • Ai-je besoin de fermer le dossier? Ou la volonté collecte des ordures à la fin de l'exécution du script fermer? Quels sont les dangers que je réagis si je ne le fais pas?
  • Dois-je créer des poignées pour chaque clone, ou devrais-je rester avec eux partager une? Si oui est-il une limite supérieure?
  • Est-il possible pour un objet cloné pour contenir une référence à l'objet original? Si je suis en train de la fermeture de la poignée dans le destructor objet que je ne devrais probablement pas fermer si l'objet est un clone. Et être capable de tracer peut vers le haut être utile, peut-être.
Était-ce utile?

La solution

Si vous implémentez la méthode __clone vous pouvez faire ce que vous voulez, quand le clonage d'un objet comme définissant une propriété flaggin comme un clone et ou définir une propriété qui détient le parent.

modifier

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top