[PHP5][POO] EXEMPLES DE SYSTEME DE CLASSE (HERITAGE, AGREGATION, COMPOSITION, ET

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 21 avril 2006 à 00:55
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 24 avril 2006 à 19:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/37166-php5-poo-exemples-de-systeme-de-classe-heritage-agregation-composition-etc-generant-de-l-html

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
24 avril 2006 à 19:03
"Antho => ça n'avait aucun rapport avec le code, d'une part"

C'est ton point de vue que je ne partage pas... j'ai de toute façon tout sauvegardé, mais bon c'est aussi une question de principe...
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
24 avril 2006 à 15:24
Nifhell : Tu t'es fait plaisir dans la mise en pratique "grande echelle" de la POO... Et c'est bien là l'essentiel ;) Mais le pire de tout est que ton jeu de classe marche ! Ton travail n'est donc pas vain, loin sans faut.
Nifhell Messages postés 48 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 23 avril 2006
24 avril 2006 à 15:15
L'idée de dérivé DOM est pas mal, même plutot efficace, et c'est vrai que je me suis bien pris le chou pour pas grand chose, sur ce code... mais son interet pour moi n'en est pas moins diminué: ça m'a permi de mettre en application pas mal de choses.

J'avoue que j'ai dérivé quelques peu au PFPMDJR (Pas Fait Par Moi, Donc Je Recommence), j'ai même pas cherché l'existance de classes à hériter, ce qui est plutot nul d'un mec qui se dit adepte de la POO :$
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 avril 2006 à 13:49
Que ce soit un mec d'ici ou pas, ça ne change pas grand chose. Je crois qu'on peut tous être d'accord pour dire que ce n'est pas un langage approprié quand on écrit sur un forum. Après, en privé, sur msn ou autre, tu dis ce que tu veux de qui tu veux :-)
Mais pas sur un forum, c'est tout.
Et comme je ne peux que supprimer tout un message...j'ai tout supprimé.
Donc je te propose de réécrire ton message, en n'en gardant que la substantifique moelle... :-)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
24 avril 2006 à 13:42
imbécil restait un terme parfaitement neutre... (pour ceux qui n'ont pas eu le temps de lire mon topic, il ne s'agissait pas de qqn d'ici...)

Bon, je faisais aussi un parallèle interressant entre ce code et la manière de créer une interface en gtk.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 avril 2006 à 13:23
J'ai dit STOP!
C'est pas possible ça lol!!

http://www.phpcs.com/forum.v2.aspx?ID=722431
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 avril 2006 à 13:18
Antho => ça n'avait aucun rapport avec le code, d'une part. D'autre part, votre discussion aurait été bien plus intéressante si elle n'avait pas pris une telle tournure : on allait de gamineries en gamineries. Je veux bien qu'on ne soit pas d'accord sur tel ou tel point, ou qu'on aime pas un code...mais il y a la manière de dire les choses! Franchement, je suis déçu.

Coucou => même remarque. "l'autre imbécile", ça ne m'a pas paru une tournure adéquate pour définir quelqu'un. Et je ne pense pas avoir tort sur ce coup.

Franchement, les gars, si on se met à se parler de manière condescendante, voire à s'insulter...on va ou ???
Tout le monde n'est pas adulte ici, je le sais très bien, mais tout le monde DOIT se comporter en "adulte"! Je mets des guillemets pour indiquer qu'il s'agit d'une façon de parler, évidemment...parce que peu d'adultes se comportent en adultes. Bref, restons civilisés!

Maintenant, mon avis personnel sur le CODE : ce n'est pas un framework, en effet, après étude plus approfondi. Ce n'est pas à utiliser pour n'importe quel type d'application web, parce qu'en effet, c'est lourd. Il y a des imperfections... surtout si on se dit qu'il s'agit là d'une philosophie de programmation; je rejoins sur ce coup JG : autant faire les choses à fond :-) DOM aurait donc été bienvenue. Et FhX pour ses améliorations.
Du coup, j'ai noté 9/10 : c'est bien codé, et ce genre de package est indispensable pour certaines appli : cela pousse à avoir un code propre, et clair, plutôt qu'un foutoir de fonctions diverses at variés, et de code séquentiel. Mais pour faire un sitre relativement simple, c'est inutile, je suis aussi d'accord avec Antho et Coucou de ce côté-ci.
Il n'empêche : l'idée est bonne, le code aussi dans l'ensemble. Pour moi en tous cas :-)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
24 avril 2006 à 13:05
je ne vois pas non plus pour quelles raison je me suis fait censuré...
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
24 avril 2006 à 12:38
Dommage d'avoir tout censuré... enfin bon c'est pas grave, ça ne change pas mes positions quant à ce que j'ai dit sur cette source...
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
24 avril 2006 à 10:27
Bonjour les gens...

On dirait que j'arrive après la bataille ;) (et tant mieux).

L'initiative de cette source est bonne, et le code ma foi fort joli...

Mais j'aurai une ch'tite question :
Les documents HTML étant du XML... (principalement un XHTML dont on respecte la norme). Pourquoi ne pas avoir créée tes classes en les dérivant de la librairie DOM ?
C'est à dire en créant une interface de cette API très complète. Interface alors dédiée au HTML. Tu n'aurais plus besoin du "abstract CObject" et "CTag", DOM se chargeant de la construction de l'arbre XML et du formatage de la sortie.
Une économie substantielle de code... Non ?

Autre avantage de la construction d'HTML à partir de DOM : on peut faire un traitement XSLT avant d'envoyer au navigateur... Ce qui peut par exemple supprimer l'utilisation des classes CPagePerso et CHeader ou/et limiter la taille de l'arbre (ex : traiter en <label for="12345">Votre nom :</label> ... Encore une sacrèe économie de caractère et on change moi souvent de clavier ;)

Enfin... encore bravo pour ton jeu complexe de classes.

A+, J_G
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 avril 2006 à 09:10
Merci pour les commentaires à supprimer!
Franchement, je ne suis pas content!

- la discussion sur les framework EST intéressante, mais merci de la poursuivre sur le forum, étant donné que tout le monde s'est entendu pour dire qu'au final, ce code n'est pas réellement un framework.
- une discussion entre "gourous" ne devrait pas se passer comme ça! Très franchement, c'était ridicule, et il n'y en a pas un pour rattraper l'autre (je parle là des 2 protagonistes principaux de cette discussion). Entre insultes et ironie blessante...pfff.

Merci de ne pas recommencer!
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
23 avril 2006 à 21:33
Tu peux même rajouter des méthodes à la classe Modulator :
<?php
class Modulator {

private $InitModule = array();
private $modules = array();

public function AddActiveModule($modulename) {
$this->InitModule[$modulename] = TRUE;
}

public function DelActiveModule($modulename) {
$this->InitModule[$modulename] = FALSE;
}

public function GetInstance() {
foreach ( $this->InitModule as $key=>$val ) {
if ( $val ) $this->modules[$key] = new $key;
}
}

public function __get($var) {
if ( isset($this->modules[$var]) ) {
return $this->modules[$var];
} else {
throw new ModuleException(' ... '); // Implique de coder une classe d'exception
}
}

?>

Et tu peux faire ca ensuite :
$module = new modulator;
$module->AddActiveModule('login');
$module->AddActiveModule('liens'); // etc...

$module->GetInstance();

// Et après :
try {
$module->login->method();
$module->liens->method();
} catch ( ModuleException $e ) {
echo $e->getMessage; // Module non actif
}

Et voilou :)
5 minutes sur le coup :)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
23 avril 2006 à 21:26
Bah tu peux faire un truc debase :

Abstract class Module { // }
class login extends Module { // }
class forum extends Module { // }
class liens extends Module { // }

class Modulator {

public $modules = array();

public function GetInstance($nom_de_lobjet) {
// Recherche si l'objet peut être instancié où non
// Si oui :
$this->modules[$nom_de_lobjet] = new $nom_de_lobjet;
}

public function __get($var) {
return $this>modules[$var];
}
}

Et la, dans ton script, faire quelque chose comme :
$module = new Modulator();
$module->GetInstance('login'); // On regarde si le module de login peut être instancier.

$module->login->methode_interne();

Un ptit truc comme ca, j'ai fais ca en 2 minutes et c'est extrèmement modulable !
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
23 avril 2006 à 13:46
Voui, c'est un avis personnel de coding ca :)

L'avantage de ma méthode c'est que je fais une fonction alors que tu dois en faire 4 ou 5... C'est juste question vitesse =)

Maintenant, moi j'ai fais ce ptit commentaire au cas où tu voulais améliorer le truc... ou alors pour un autre projet, que sait-je :)

En tout cas, la finalité du code est bien faite. Je comptais faire quelque chose de similaire mais n'ayant pas le temps je ne peux pas :/

En tout cas félicitation !
Nifhell Messages postés 48 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 23 avril 2006
23 avril 2006 à 09:46
FhX,

Ton optimisation présentée est certainement plus économique. Mais comme tu as pu le lire ce code n'a rien d'économique!!!

C'est vrai que j'aurais pu faire une grosse fonction...

Par contre, je n'aime pas trop les méthodes magiques "__get" et "__set", parce que je trouve que dans le principie (dans la pratique, elle le respecte ;) ) elles ne respectes pas vraiment le concept d'encapsulation des données. Mais c'est vrai qu'encore une fois elle font gagner du temps.
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
22 avril 2006 à 18:53
Moi ce que j'aime pas... c'est la dizaine de méthode pour faire du get...
Alors qu'il existe __get() et suffit de faire un léger parsing pour que ca soit plus propre.

Pareil pour les méthodes txt_*, del_*, align_*... autant faire ca en une méthode et taper un parsing.

Ex:
# public function alignCenter() {
# $this->modifyProperty("align&=center");
# return $this;
# }
// etc...

public function Align($var) {
$array = array('center','left', 'right', 'justify');
$var = strtolower($var);
if ( in_array($var, $array ) ) {
$this->modifiyProperty('align&='.$var);
return $this;
} else {
throw new Exception('Aucun alignement possible ne correspond à '.$var);
}
}

Ca c'est de la méthode générique.
Si tu veux pas charger le tableau à chaque appel de méthode ==> tu fous ca en propriété. Genre un gros tableau style :
private $array array( 'align'> array ('center', 'left', 'right', 'justify') );
Et tu accèdes à ce que tu veux via :
$this->array['align'][$var]; Par exemple.

Moi je trouve ca plus beau que de faire 70 méthodes pour plus ou moins la même chose au final... Ou alors y'a aussi le coup du __call() qui peut bien marcher aussi... y'a plein de possibilité à exploiter :)
Nifhell Messages postés 48 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 23 avril 2006
22 avril 2006 à 11:56
OK merci pour les infos.

Il est vrai qu'il ne s'agit clairement pas d'un framework.

Mais mon but était de présenter ce que j'avais fait pour mon site persos.
Pour ce dernier, je n'avais pas envie de mettre en place un système de template que je connais mal et ni de me préoccuper des performances du site (c'est pas avec la fréquentation de mon site que je vis écrouler les serveurs de free...) ni encore de me lancer dans l'apprentissage de l'utilisation d'un framework existant ou ni encore de me conformer à des normes W3C.
Je voulais mettre en application la POO que je venais d'étudier à mon école (c'était il y a 2 ans).

Et ce code n'a jamais eu la prétention d'avoir une application professionnel.
Si quelqu'un veut l'utiliser, il le prend, et il verra un peu ce qu'est un héritage, une sudéfinition, etc... en POO

Aussi je vais changer le titre et le niveau de cette source, car finalement, vous me l'avais fait comprendre, elle ne prétend pas à un framework, mais à une démonstration de POO.
Nifhell Messages postés 48 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 23 avril 2006
21 avril 2006 à 20:29
Bonjour,

Ecoutez la polémique était plutot interessante sur l'utilité des Frameworks et de savoir si ce que j'avais fait en était un (visiblement j'ai fait un abus de langage) jusqu'à ce que ça dérappe aux insultes.

Mon code n'est certainement pas utile à tout le monde. Mais il peut peut-être aider quelqu'un.

Alors continuer la conversation de manière cordiale, car j'ai appris des trucs grace à vous deux, mais si c'est pour vous insulter donnez vous votre adresse IM et faites le par ce biais là.

En espérant, ne facher personne: on doit cocher une case, non, pour poster quelque chose ici, il me semble??
cs_jfs59 Messages postés 178 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 2 février 2010
21 avril 2006 à 20:24
Ben j'ai pas grand chose a dire sur le source ! sauf que franchement vous donnez pas envie de le lire ... mais surtout, et c'est a mon avis plus grave, a lire vos commentaires et vos chamaillerie de gosses de 4 ans, on a pas non plus envie de poster quelque chose sur le site, quelque soit le niveau.
a ne pas vous connaitre donc .. ni l'un ni l'autre !
cs_stailer Messages postés 507 Date d'inscription jeudi 28 mars 2002 Statut Membre Dernière intervention 13 mai 2009 1
21 avril 2006 à 20:04
Ah, au fait, pour ceux que ça intéresse, il y a un autre outil très puissant avec notamment des tutoriaux sur developpez.com : XMLRAD.
C'est un framework multi base de données et multi langage, extrêmement performant et basé sur XML.

Pour ceux qui débutent en php et qui croient qu'un framework ne sert à rien et est hyper lourd (j'en connais), je leur conseille de l'essayer en local, le logiciel est assez intuitif et les tutoriaux sur developpez.com plutôt bien expliqués.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
21 avril 2006 à 10:14
faut aussi que je mate.
Mais à priori, je suis de l'avis d'Antho sur ce coup.
Même si bon, le code a l'air joli.
Faut aussi voir ton site du coup ;-)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
21 avril 2006 à 00:55
Salut,

ça par contre, c'est du boulot, mais c'est lourd et crade (enfin ce n'est que mon avis) d'utiliser ce genre de trucs pour concevoir un site :-)
Rejoignez-nous