captain_torche Posté 30 Août 2011 Partager Posté 30 Août 2011 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 More sharing options...
BlackPage Posté 30 Août 2011 Partager Posté 30 Août 2011 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 More sharing options...
captain_torche Posté 30 Août 2011 Auteur Partager Posté 30 Août 2011 Je vais regarder ça, merci ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
SStephane Posté 30 Août 2011 Partager Posté 30 Août 2011 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 More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant