passage par référence pour objets php [OK]

passage par référence pour objets php [OK] - PHP - Programmation

Marsh Posté le 19-05-2004 à 16:29:08    

J'ai un problème avec une implémentation d'arbre n-aire en Php.  
 
Il faut que je puisse créer tout les noeuds puis composer l'arbre un peu comme je veux par la suite c'est a dire en rattachant les fils les uns aux autres.
 
J'ai donc un objet "Node" (noeud) avec une méthode "addChild($Node)"  (qui ajoute a this l'objet $Node en tant que fils) et je voudrai pouvoir passer les noeuds par référence afin de pouvoir leur ajouter par la suite des autres fils via les memes variables.
 
J'ai essayé plusieurs combinaisons avec le "&" sans succes
 
notamment ceci, que j'aurai dit juste [:spamafote]
 


function addChild(&$newNode) // fonction dans la classe
...
$Racine->addChild($Fils1); // dans le main
$Fils1->addChild($Fils2);


 
Un dump de l'arbre donne "Racine" et "Fils1"... (manque fils2)
 
Toute suggestion a ce propos est la bienvenue.


Message édité par boulax le 21-05-2004 à 10:00:54

---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 19-05-2004 à 16:29:08   

Reply

Marsh Posté le 20-05-2004 à 22:37:16    

up, personne ?
 
+Edit du post


Message édité par boulax le 20-05-2004 à 22:40:20

---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 20-05-2004 à 23:15:56    

Et le reste du code, on le devine?

Reply

Marsh Posté le 20-05-2004 à 23:30:39    

gizmo a écrit :

Et le reste du code, on le devine?


 
bah je vois pas ce qu'il te faut  :??:  
Ma question c'est juste comment filer des references d'objets a un autre objet.


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 20-05-2004 à 23:41:44    

classe::methode()

Reply

Marsh Posté le 20-05-2004 à 23:45:14    

c'est censé m'aider ?


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 20-05-2004 à 23:48:11    

on est censé comprendre? :/

Reply

Marsh Posté le 20-05-2004 à 23:50:07    

Qu'est ce que t'as pas compris ?


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 21-05-2004 à 08:09:36    

boulax a écrit :

bah je vois pas ce qu'il te faut  :??:  
Ma question c'est juste comment filer des references d'objets a un autre objet.


Alors dans ce cas, ton code est juste. Suffisait de lire la doc pour s'en convaincre. Maintenant, si ce n'est pas le cas en pratique, c'est que tu fais une merde ailleurs dans ton code...

Reply

Marsh Posté le 21-05-2004 à 09:27:06    

Oui, je pense que ca vient de mon objet noeud. En fait je stocke les fils dans un tableau en faisant un array_push et apparemment cette méthode effectuerait une recopie. Je vais tester en faisant des affectations de références ('=&') à la place.
 
EDIT: voici donc le code qui fonctionne
 


function addChild(&$child) // dans classe noeud
{  
 $this->Children[] =& $child;    
}
....
function &getRoot() // dans classe arbre
{
 return $this->Root;
}
.....
// tests
$ctarbre = new TreeView(new Node(new TreeValue("onclick","display0" )));
$n0 =& $ctarbre->getRoot();
$n1 = new Node(new TreeValue("oncolck","display1" ));
$n2 = new Node(new TreeValue("oncolck","display2" ));
$n3 = new Node(new TreeValue("oncolck","display3" ));
$n4 = new Node(new TreeValue("oncolck","display4" ));
$n5 = new Node(new TreeValue("oncolck","display5" ));
$n6 = new Node(new TreeValue("oncolck","display6" ));
$n7 = new Node(new TreeValue("oncolck","display7" ));
$n8 = new Node(new TreeValue("oncolck","display8" ));
$n9 = new Node(new TreeValue("oncolck","display9" ));
 
 
$n0->addChild($n1) ;
$n0->addChild($n2) ;
$n0->addChild($n3) ;
   
$n1->addChild($n4);
$n1->addChild($n5);
$n1->addChild($n6);
 
 
$n4->addChild($n7);
$n3->addChild($n8);
 
$n0->addChild($n9);
 
 
$ctarbre->paintTreeView();


 
ce qui donne bien :


display0  
       display1  
            display4  
            display5  
            display6  
       display2  
       display3


Message édité par boulax le 21-05-2004 à 10:00:26

---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed