Webmaster Hub: [POO] - modifier la classe d'un objet - Webmaster Hub

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

[POO] - modifier la classe d'un objet Noter : -----

#1 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Voir le blog
  • Groupe : Admin
  • Messages : 6 722
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 30 août 2011 - 10:17

Salut à tous !
Je suis en train de refondre mon site, et comme la POO est mon point faible, je m'y mets sérieusement.

Je suis malgré tout en train de me heurter à un petit souci.

J'ai une première classe appelée "page". De cette classe découlent chacune de mes sous-classes pour les pages spécifiques (J'ai des sous-classes "Article", "rêve", etc).
Actuellement, je charge quoi qu'il arrive la classe "page". Le constructeur de cette classe détermine le type de page en fonction de l'url que j'ai en paramètre GET.

Je voudrais, si cela est possible, une fois que j'ai déterminé que le type est "Article", que mon objet devienne lui-même un objet article.

Mon code actuel :
			switch($this->type) {
				case 'article':
					$this	=	new article();
					break;
			}

Me renvoit l'erreur suivante : "Cannot re-assign $this".

Y-a t'il un moyen de réaliser ce que je veux faire, ou ma logique n'est-elle pas bonne ?
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#2 L'utilisateur est hors-ligne   BlackPage 

  • Groupe : Actif
  • Messages : 23
  • Inscrit(e) : 27-avril 05

Posté 30 août 2011 - 12:10

Salut,

Par définition, $this renvoie vers ton objet que tu as déclaré en tant que objet page. Tu ne peux donc pas transformer ton $this "Page" en $this "Article"...

Par contre, tu peux faire : $this.Type = new Article et alors tu stockes ton nouvel objet article dans une propriété de ta classe Page...

En espérant que ca t'aide.
0

#3 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Voir le blog
  • Groupe : Admin
  • Messages : 6 722
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 30 août 2011 - 12:50

Je vais regarder ça, merci !
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#4 L'utilisateur est hors-ligne   SStephane 

  • Groupe : Fondateur
  • Messages : 460
  • Inscrit(e) : 06-février 09
  • Genre:Homme
  • Localisation:Grabels

Posté 30 août 2011 - 22:31

Euh... regarde plutôt du côté du pattern factory http://fr.wikipedia....e_conception%29

A vue de nez, tes pages (Article, Breve etc.) peuvent étendre une classe abstraite Page ou implémenter une interface IPage (voire même faire les 2 ou plus car on peut implémenter plusieurs interfaces en php comme dans la majorité des langages).

Ta logique va dans le bon sens (puisque tu es dans la logique du pattern factory, largement utilisé), mais je dirai que le fait que tu te retrouves à écrire $this = new Article() ne sonne pas bon :)

Citation

Par contre, tu peux faire : $this->Type = new Article et alors tu stockes ton nouvel objet article dans une propriété de ta classe Page


Bof, dans un langage parlé, un article n'est ni plus ni moins qu'un type de page particulier, ce n'est pas réellement une propriété de page mais plus une sous-classe.
_AT_Montpellier
L'héroïsme, c'est la seule manière de devenir célèbre quand on a pas de talent (l'homme aux initiales douteuses)
Venez tester votre niveau de compétence en PHP :-)
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)