Aller au contenu

[POO] - modifier la classe d'un objet


captain_torche

Sujets conseillés

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Euh... regarde plutôt du côté du pattern factory http://fr.wikipedia.org/wiki/Fabrique_%28patron_de_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 :)

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.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...