Detruire objet

pingwin Messages postés 6 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 19 mai 2005 - 19 mai 2005 à 10:38
pingwin Messages postés 6 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 19 mai 2005 - 19 mai 2005 à 13:49
Bonjour

J'ai un petit pb de syntaxe : Dans une classe appelée Telnet j'ai une méthode traiteTabNeighbor() qui boucle en appelant une fonction exterieure a la classe throwNeighborthreat(). Cette fonction throwNeighborthreat(), cree un objet de type Telnet et lui applique les methodes de la classe Telnet. Dont la méthode traiteTabNeighbor, en fait ça fait une boucle recursive. En fait des que le traitement est fini je voudrais detruire l'objet cree par la fonction throwNeighborthreat, mais le faire dans la boucle de la méthode traiteTabNeighbor. Cependant, je ne vois pas comment appeler la fonction delete dans ma boucle sachant que je n'ai aucune reference à l'objet que je veux detruire a cet endroit... je ne sais pas si j'ai été très clair. mais si vous voyez une solution ou vous voulez des precisions, n'hesitez pas. Cordialement

class Telnet{
...
function traiteTabNeighbor(){

$tab = array_reverse($this->tab_neighbor);

foreach($tab as $eq){

returnTable();

if (!in_array($eq,$GLOBALS["tab_connu"])) {

throwNeighborthreat($eq);

}

}
...
}

function throwNeighborthreat($equipment){

$telnet = new Telnet($equipment);
echo "
Traitement en cours sur : ".$telnet->nomequipmnt. " d'adresse IP : ".$telnet->ip;
$telnet->extractIndexInterface();
$telnet->connexionTelnet();
$telnet->recupData();
$telnet->creeFichierTxt();
echo "<center>".$telnet->nomequipmnt." : Neighborhood
</center>";
$telnet->traiteFichierTxt();
$telnet->deleteAll();
$telnet->returnTab();
$telnet->traiteTabNeighbor();

}

4 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
19 mai 2005 à 10:55
Hello,



je ne vois pas trop comment tu vas pouvoir faire ca avec cette syntaxe.

Pourquoi ne fais tu pas de throwmachin une methode de ta classe telnet,
puisque de toutes facons une methode de cette classe a besoin de cette
fonction.

Tu fais du recursif dans les 2 sens...tu ne peux detruire ni l'un ni
l'autre tant qu'ils n'ont pas fini leurs appels recursifs. Bref, je
trouve ca un peu tordu ;-)
0
pingwin Messages postés 6 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 19 mai 2005
19 mai 2005 à 11:10
je suis entièrement d'accord sur le fait que ce soit tordu...
Par contre meme si je mets la fonction throwmachin dans ma classe, cela ne m'aide en rien dans mon pb.

En fait le but est de parcourir un arbre. Je pars de la racine pour lequel je crée un objet Telnet racine, puis je lui applique la série de fonctions comprises dans throwNeighborthreat. J'obtiens alors un tableau (attribut de Telnet racine, qui constitue les fils de la racine),dans lequel pour chaque fils obtenu je crée un nouvel objet telnet Fils pour ainsi obtenir les petits-fils.... Cependant, vu que ça plante au bout d'un certain temps (~29 traitements) je me suis dit que ça venait de la mémoire ou un truc du genre. Vu que je créé un objet pour chaque element et que tant que le prg tourne les objets sont vivants, je me suis dit qu'il serait utile des les detruire au fur et a mesure que le traitement est fini. Or comment faire?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
19 mai 2005 à 12:41
=> Par contre meme si je mets la fonction throwmachin dans ma classe, cela ne m'aide en rien dans mon pb.

Ben tu ne creeras ainsi pas d'objet supplementaire. J'avais bien
compris le principe, et le probleme (du moins je m'en doutais).

=> je me suis dit qu'il serait utile des les detruire au fur et a mesure que le traitement est fini.

Tu es dans un traitement recursif...je
te rappelle que dans une telle boucle, le DERNIER appel se ferme
d'abord, puis l'avant dernier...etc jusqu'au premier. Dans tous les cas
de figure, donc, tu ne pourras en aucun cas detruire le 1er objet, puis
le second etc...tu creeras toujours d'abord tous les objets, et ne
pourra les detruire qu'a la fin, du dernier au premier.

Je maintiens que c'est un probleme de conception.

Je reviens a mon idee : tu ne crees qu'un seul objet telnet, qui
cree son tableau et le parcours recursivement avec sa methode. Un seul
objet, et une grosse variable membre : le tableau.
0
pingwin Messages postés 6 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 19 mai 2005
19 mai 2005 à 13:49
Bon après des jours entiers à me demander pourquoi ça bloquait, j'ai enfin trouvé la soluce. En fait mon algo et ma conception fonctionne. Il s'avère que le max_execution_time de mon php.ini était trop faible pour parcourir tout l'arbre. En fait je bossais sans débugger et avec php 4.3. Comme j'ai voulu utilisé l'utilisation des references dans mon prg, j'ai installé php 5 y'a une demie-heure. Et o miracle, celui-ci fournit un debugger de base et m'a perni de voir le message d'erreur que générait mon appli : Fatal error: Maximum execution time of 30 seconds exceeded in. Bref que du bonheur. Et merci à toi pour tes explications et ta patience

Bonne continuation

Cordialement
0
Rejoignez-nous