Aller au contenu

[POO] - modifier la classe d'un objet


Sujets conseillés

Posté

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 ?

Posté

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.

Posté

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.

Veuillez vous connecter pour commenter

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



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