JeuWeb - Crée ton jeu par navigateur
A propos de la POO en PHP - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : A propos de la POO en PHP (/showthread.php?tid=1904)

Pages : 1 2 3 4 5


A propos de la POO en PHP - appzer0 - 19-10-2007

Je suis tombé là-dessus : http://pmo.developpez.com/manuel/.

Citation :PMO est une API développée en PHP. Un Object relational Mapping (ORM) qui transforme les résultats de requêtes SQL en objets. PMO est basé en parti sur le motif de conception Active record. PMO gère les relations 1:1, 1:n, n:m

Que pensez-vous de ce genre d'approches ? A quel type de projets la programmation orientée objet (POO) convient le mieux d'après vous ?

Plus généralement, voyez-vous plutôt l'orienté objet (en PHP) comme une simple "revisite" de procédures déjà existantes ou bien comme un progrès et un aspect pratique incontestable ? Toutes ces considérations concernent evidemment les applications en PHP et son aspect OO dans vos projets propres, on n'est pas là pour troller sur la POO en PHP dans sa globalité, il y a d'autres sites pour ça.


RE: A propos de la POO en PHP - joshua - 19-10-2007

symfony s'appuie sur un orm. Je pense que ca sert pour tout projet "propre" et complexe.


RE: A propos de la POO en PHP - Sephi-Chan - 19-10-2007

joshua a écrit :symfony s'appuie sur un orm. Je pense que ca sert pour tout projet "propre" et complexe.
Symfony ceci, Symfony cela... Tu ne jures plus que par ça maintenant ! Confusediffle:


RE: A propos de la POO en PHP - joshua - 19-10-2007

vilain copieur/colleur :p


RE: A propos de la POO en PHP - Sephi-Chan - 19-10-2007

C'était pour mettre en évidence le message. Mais pour être un peu plus poétique : les modes passent comme les saisons. :p


RE: A propos de la POO en PHP - naholyr - 19-10-2007

Un ORM de plus dans la jungle des ORM. Ils rendent la conception bien plus propre, et facilitent la modélisation (on modèlise ses objets en même temps que sa base de données, ce qui permet de factoriser les efforts).
En revanche il faut bien surveiller (mais ça c'est toujours vrai) le nombre de requêtes réellement exécutées derrière (et donc disposer de logs ou d'un "mode debug" correct) car on a tendance à oublier un peu vite les risques d'écroulement des perfs si on ne fait pas la bonne requête au bon endroit.

Par exemple (syntaxe tirée de Propel) si on veut récupérer les noms des chats de chaque maître dont on a la liste des IDs, le but étant d'avoir un tableau associatif "nom du maitre" => "nom du chat".
Schéma trivial :
Code :
maitre:
  id: ~
  nom: varchar(64)

chat:
  id: ~
  nom: varchar(64)
  maitre_id: ~

On évitera un
Code PHP :
<?php 
$chats
= array();
foreach (
$ids as $id) {
$maitre = MaitrePeer::retrieveByPk($id); // N*1 requête
foreach ($maitre->getChats() as $chat) { // N*1 requête
$chats[$maitre->getNom()][] = $chat->getNom();
}
}
// Total : 2*N requête (N étant la taille de $ids)
On lui préfèrera (aussi simple)
Code PHP :
<?php 
$chats
= array();
$maitres = MaitrePeer::retrieveByPks($ids); // 1 requête
foreach ($maitres as $maitre) {
foreach (
$maitre->getChats() as $chat) { // N*1 requête
$chats[$maitre->getNom()][] = $chat->getNom();
}
}
// Total : N+1 requête (N étant la taille de $ids)
Et comme on est dans un cas un peu particulier, on voudra optimiser ce goulot d'étranglement au prix d'un code légèrement plus complexe (encore que) :
Code PHP :
<?php 
$chats
= array();
$c = new Criteria;
$c->add(MaitrePeer::ID, $ids, Criteria::IN);
$chats = ChatPeer::doSelectJoinMaitre($c); // 1 requête
// Note : on passe par ChatPeer car seule la classe "à gauche" dans la relation 1..n a connaissance de cette relation.
// En revanche au niveau de l'objet, il existe bien Maitre::getChats() et Chat::getMaitre().
foreach ($chats as $chat) {
$chats[$chat->getMaitre()->getNom()][] = $chat->getNom();
}
// Total : 1 requête, quelque soit la taille de $ids

On observera que malgré le fait qu'on le soit descendu d'un cran au niveau abstraction dans le dernier exemple (normal, à ce stade on a privilégié l'optimisation, c'est forcément au détriment d'un autre aspect), on est tout de même à un niveau un peu plus "sémantique" que
Code PHP :
<?php 
$result
= $db->query('SELECT chat.nom as nom_chat, maitre.nom as nom_chat
FROM chat
INNER JOIN maitre ON (maitre.id = chat.maitre_id)'
);
$chats = array();
while (
$result->next()) {
$chats[$result->nom_maitre][] = $result->nom_chat;
}

P.S: Symfony, ça rox. Là où certains voient une mode, d'autres voient plutôt le résultat de l'évolution naturelle.


RE: A propos de la POO en PHP - lanoix - 19-10-2007

naholyr a écrit :P.S: Symfony, ça rox. Là où certains voient une mode, d'autres voient plutôt le résultat de l'évolution naturelle.

Ah ouais comme le Zend Framework Big Grin


Plus sérieusement, apparement PMO ici proposé est assez léger que pour éviter à des débutants de se plonger directement dans des monstres genre symfony... Si c'est vraiment le cas, ca peut être bénéfique...


RE: A propos de la POO en PHP - joshua - 19-10-2007

hé, ho, on disait aussi du vilain petit canard que c'était un monstre. Mais il a fini cygne, hein?


RE: A propos de la POO en PHP - pascal - 19-10-2007

1. Que pensez-vous de ce genre d'approches ?

je suis pour, car cela structure le code et simplifie la lecture / les modifications ultérieures

2. A quel type de projets la programmation orientée objet (POO) convient le mieux d'après vous ?

tout projet qui compte plus d'une personne et/ou plus d'une semaine à maintenir le code et/ou beaucoup de choses à faire

3. Plus généralement, voyez-vous plutôt l'orienté objet (en PHP) comme une simple "revisite" de procédures déjà existantes ou bien comme un progrès et un aspect pratique incontestable ?

les deux Smile

on peut revisiter simplement, en améliorant son code :
etape 0 : du code paté, tout mélangé
etape 1 : séparer le template/affichage du code métier
etape 2 : faire des fonctions avec des paramétres
etape 3 : faire des fonctions avec des tableaux
etape 4 : remplacer fonction + tableau par une classe

fin voilà,

A+

Pascal


RE: A propos de la POO en PHP - Sephi-Chan - 19-10-2007

Moi je demande rien de mieux qu'apprendre à POOter, mais il me faudrait l'appui de quelqu'un pour que je prenne de bonnes habitudes dès le début en m'orientant dans mes choix, etc.

Donc si l'une des nombreuses personnes qui prônent l'objet veut devenir mon tuteur, je lui en serait très reconnaissant. N'hésitez pas à me MP.


Sephi-Chan