Désolé mon titre n'est pas génial, c'est mon premier vrai coup de barre pour passer à 100% à OO car j'ai été procédural pendant plus d'années que je me souvienne. J'ai du mal à comprendre si ce que j'essaie de faire est possible. Selon les pensées des gens sur les 2 points suivants, je vais suivre cette voie. Le CMS que je suis en train de mettre en place est petit, mais il se concentre beaucoup sur différents types de contenu. Je pourrais facilement utiliser Drupal avec lequel je suis très à l'aise, mais je veux me donner de bonnes raisons de passer à des modèles de design/OO-PHPPatterns pour les composants CMS dynamiques (Event driven?)
1) J'ai créé une classe de base 'content' Je souhaite pouvoir étendre pour gérer différents types de contenu. La classe de base, par exemple, gère le contenu HTML et les extensions peuvent gérer les sorties XML ou PDF à la place. D'autre part, à un moment donné, je souhaiterais étendre complètement la classe de base pour un projet donné. C'est à dire. Si la classe 'content-v2' étend la classe 'content' pour ce site, tous les appels à cette classe devraient appeler 'content-v2' à la place. Est-ce possible?
Si le code instancie un objet de type 'content' - je veux en fait instancier un de type 'content-v2' ... Je peux voir comment le faire en utilisant l'héritage, mais cela semble impliquer de se référer à la classe explicitement, je ne vois pas comment lier la classe que je veux utiliser dynamiquement. 2) Deuxièmement, la façon dont je construis cela en ce moment est horrible, je ne suis pas content. Cela semble très linéaire, c'est-à-dire obtenir des détails sur la session> obtenir du contenu> construire la navigation> page du thème> publier. Pour ce faire, tous les objets sont appelés 1 par 1, ce qui est très statique. Je voudrais qu'il soit plus dynamique afin que je puisse y ajouter à une date ultérieure (très proche de la première question). Y a-t-il un moyen, à la place de ma classe orchestrator appelant toutes les autres classes 1-by-1, de construire le tout à la fin, au lieu que chacune des autres classes puisse 'écouter' des événements spécifiques, puis au point applicable sauter et faire leur mais? De cette façon, la classe orchestrator n'aurait pas besoin de savoir quelles autres classes étaient requises, et les appellerait 1-by-1. Désolé, si j'ai tout cela tordu dans ma tête. J'essaye de construire ceci donc c'est vraiment flexible.
Bien que daté, son apparence comme une bonne ressource (PHP OO eBook gratuit) pour commencer avec quelques-unes des bases: http://www.pdf-word.net/Tutorial-Programming-PHP/Object-Oriented-Programming -In-PHP5.html – Jaxidian
Merci beaucoup pour votre réponse brillante, très appréciée! Je pensais avoir compris le polymorphisme, mais clairement non parce que je ne croyais pas que c'était une solution ... Ps ces noms de classe n'étaient pas les vrais, juste une tentative pour illustrer ma question: 0) – CitrusTree
Donc ce qui me trouble est illustré ici: http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming#PHP Je comprends la chose Chien/Chien, mais Cat et Dog sont toujours mentionnés explicitement pour les instituer. Comment appelons-nous Cat ou Dog en fonction de l'état actuel. Disons que chaque enregistrement de la table de contenu a enregistré son type de contenu. Pourriez-vous utiliser quelque chose comme: $ content = new $ row ['type']; $ contenu-> publier; ... où $ row est la ligne courante du jeu d'enregistrements et le type est un nom de classe (valide)? – CitrusTree