PHPOO : $this = <Objet de même classe>

Leyry Hynemonth

a découvert une nouvelle définition de l'ennui.
Club iGen
18 Décembre 2004
4 145
263
Nîmes
www.lyhn.fr
Bonjour !

Voilà, je rencontre une petit problème. Pas insurmontable, mais je n'arrive pas à le résoudre avec une approche abstraite.

Bloc de code:
...
class User {
	private $idUser;
	private $login;
	private $passwordHash;
	...
public function __construct($id = null, $login = null, $password = null){
	switch (true)
		{
			...
			case ($id != null) :
				$u = $db->query("select * from user where idUser = '{$id}';");
				$this->login = $u[0]['login'];
				$this->passwordHash = $u[0]['password'];
				break;
			...
			case (autre test) :
				$ad = new User($_SESSION['idUserAdmin']);
				[COLOR="Red"]$this = $ad;[/COLOR]
				...
				break;
			...
			}
	...


	}
...
}

Je cherche donc à affecter un objet à un autre (de même classe), à l'intérieur d'une des méthodes de l'objet.
Et il n'est pas d'accord :
PHP a dit:
Fatal error: Cannot re-assign $this in /oups/User.php on line 42

Comment faire pour ne pas descendre au niveau du $this->login = $ad->login [...], et sachant que je ne peux pas le faire un niveau plus haut (Ce qui là ne poserait pas de problème...) ?


Merci pour vos avis.
 
$this = tout seul ne correspond à rien, $this permet d'accéder a une méthode ou un attribut de ta classe, il faut donc spécifier lequel : $this -> méthode() ou $this->attribut.

Essaye donc
Bloc de code:
$this -> login = $ad;
Je cherche donc à affecter un objet à un autre (de même classe)

Ne pas confondre classe et objet, une classe est en quelque sorte le moule qui va permettre de construire l'objet.
 
Je pensais pas avoir si mal expliqué mon problème....
$this -> login = $ad;
Va me mettre le nouvel objet utilisateur dans le login de l'utilisateur instancié.

Comment faire un métaphore...
Un objet de la classe Papillon déclenche une méthode qui retourne un objet de la classe VerASoie.
Le but est que l'objet papillon modifie lui-même la référence qui mène vers lui pour que ça pointe ver le verASoie.
L'objet de classe Environnement (contenant des collections d'Insectes) pourrait très bien faire papillon = new VerASoie; sauf que ce n'est pas l'environnement que déclenche la transition.

Voyons voir si c'est moins incompréhensible pour les autres...
 
Va me mettre le nouvel objet utilisateur dans le login de l'utilisateur instancié.
Ah oui autant pour moi.
En fait tu voudrais que Papillon créé un VerASoie et que ce même Papillon se transforme en VerAsoie ?
De part ton exemple tu vois bien qu'il y a un problème quelque part...
Ca me parait pas logique dans le sens ou un objet peut se modifier (en fonction de la classe à partir de laquelle il est créé) mais pas une classe.
Classe et objet étant deux choses différentes tu ne peux pas faire : classe = objet.
 
Dernière édition: