JeuWeb - Crée ton jeu par navigateur
Pointeur et objet - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Pointeur et objet (/showthread.php?tid=3969)

Pages : 1 2


Pointeur et objet - Wells - 14-05-2009

Bonjour, j'ai un petit soucis. Vous allez vite comprendre :

Code PHP :
<?

class toto
{
public
$valeur;
}


$toto1 = new toto;
$toto1->valeur='A';

$pouet=array();
$pouet2=array();

$pouet[0]=$toto1;
$pouet2[0]=$toto1;

$pouet[0]->valeur='B';

echo
$pouet2[0]->valeur; //affiche B

?>

Comme vous le constatez mes deux tableaux sont des pointeurs, puisque modifier l'un modifie l'autre.

Hors moi j'aimerais avoir un objet dans chacun de mes tableaux. Cela me permettra de faire tt les modifs que je veuc dans $pouet tout en gardant une sauvegarde de l'état initial dans $pouet2.

qq'un a une solution ?
ps: posté aussi ici:http://www.phpfrance.com/forums/voir_reponse-290818.php#290818


RE: Pointeur et objet - Findel - 14-05-2009

En php4 faire $nouveau = $source; fait une copie, donc ce que tu décris ne se produit qu'en php 5.

Pour résoudre le pb en php5, il te faut faire un clone de l'objet :

$pouet2[0] = clone($pouet[0]);


RE: Pointeur et objet - Wells - 14-05-2009

Hum quand je rajouter la méthode clone dans ma classe:

Code:
Fatal error: Cannot override final method Exception::__clone()


noté que ma classe hérite d'une autre. Placé la méthode clone dans la classe mère produit le même message dans la dites classe mère.


RE: Pointeur et objet - Mycroft - 14-05-2009

Ca me choque pas trop dans le sens où logiquement tu n'as toujours qu'une instance de la class Toto.

Par contre, le comportement de php4 m'aurait choqué Smile.

Poste intéressant en tout cas.


RE: Pointeur et objet - Wells - 14-05-2009

hum certes m'enfin ca marche tjs pas le clone :p


RE: Pointeur et objet - Sephi-Chan - 14-05-2009

Je te propose d'essayer ce qui suit :

$toto1 = new toto();
$toto1->valeur='A';

$pouet = array($toto1);
$pouet2 = array(clone $toto1);

$pouet[0]->valeur='B';

echo $pouet[0]->valeur; // Affiche B.
echo $pouet2[0]->valeur; // Affiche A.

Tu devrais, à priori, avoir le résultat escompté.


Sephi-Chan


RE: Pointeur et objet - Wells - 14-05-2009

Le clonage ne marche pas car j'hérite de la class Exception.

Je me suis donc résolut à faire la mienne:

Code PHP :
<?php 
function clonage($BATIMENT)
{
$CLONE = new WBatiment;
foreach(
$BATIMENT as $key=>$value)
$CLONE->$key=$value;
return
$CLONE;
}



RE: Pointeur et objet - wild-D - 14-05-2009

autre variante, y a la méthode magic __clone() si tu souhaite

après y a un détail qui me laisse perplexe; c'est pourquoi tous tes objets héritent de la classe Exception ? -enfin si j'ai bien compris ce que tu dis-


RE: Pointeur et objet - Zamentur - 14-05-2009

Juste pour info on parle pas de pointeur en php mais de référence.

Sinon je me demande aussi à quoi peut servir d'hériter de la classe exception et de faire une sauvegarde
Dans ce cas précis je me demande si il serait pas mieux de définir un objet sauvegarde toto qui serait alors recharger via une méthode si besoin.
Non parce que si tu clones çà veux dire que tu as 2 exceptions... Ça doit pas être pour rien que les exception ne soient pas clonable...


RE: Pointeur et objet - pascal - 14-05-2009

Est-ce que ta classe (batiment ?) est une sorte d'exception ?

Il y a peut être à revoir du coté de la conception.

A+

Pascal