Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

L'usage des classes en PHP est-il abusif ?
Un développeur allemand pense que oui

Le , par Benjamin Delespierre

7PARTAGES

4  5 
Les développeurs PHP sont-ils fonctionophobiques ? C'est en tout cas ce que pense un jeune développeur allemand. Sur sa page GitHub, nikic déplore la surdominance de l'OOP sur la programmation procédurale et dénonce la pratique selon lui trop répandue de programmation orientée classes.

D'après lui, cette réticence à utiliser des fonctions viendrait principalement du chargement automatique des classes, une fonctionnalité aujourd'hui largement répandue qui permet le chargement automatique de classes à la demande, ce qui est nativement impossible avec les fonctions. Les développeurs PHP seraient donc tentés d'exprimer leurs besoin au travers de méthodes, ce qui conduit à une approche orientée-classes moins naturelle que l'utilisation de fonctions.

nikic va jusqu'a dénoncer la pratique courante consitant à isoler chaque classe dans un fichier séparé et invite les développeurs à adopter l'approche Python où chaque fichier caractérise souvent un module et non une seule classe, permettant de ce fait l'usage naturel de fonctions.

Source : L'article sur le blog de nikic

Et vous ?

Trouvez-vous également que l'usage des classes est parfois abusif voire contre-productif ?
Préférez-vous l'approche procédurale ou objet ?
Comment structurez-vous votre application ?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Neko
Membre chevronné https://www.developpez.com
Le 25/08/2012 à 11:00
Citation Envoyé par arnolem Voir le message
Mouai, ca c'est de l'actu qui sert a rien.
En plus, c'est complétement con et inutile ce qu'il dit.
Place au troll ...
Merci pour cette argumentation très complète! Ça donne une super image des "Rédacteur/Modérateur"
11  4 
Avatar de stailer
Membre chevronné https://www.developpez.com
Le 26/08/2012 à 19:50
DVP n'a pas d'explication à fournir...

Après voilà, c'est la tendance actuelle : bcp de développeurs prennent comme parole d'évangile le 1er blog en anglais venu.

Il suffit qu'un gus aux USA écrive que Perl c'est de la bombe et si son blog est bien référencé ça y est : l'article est cité partout et ça fait débat.

De tout façon aujourd'hui : tout fait débat. Tout se dit et son contraire...
11  4 
Avatar de MaitrePylos
Modérateur https://www.developpez.com
Le 27/08/2012 à 15:28
Citation Envoyé par jeroy Voir le message
Source : http://nikic.github.com/aboutMe.html

Il doit être très content le petit de se retrouvez en une d'une gros site français de développeurs, censé s'adresser aux "professionnels de l'informatique".

L'équipe de DVP a une explication à fournir là ?
LE petit, à même le culot de proposer des RFC qui sont en passe d'être accepté par le core team de PHP , vous qui critiquez son jeune âge, j'imagine que vous en faites autant.

A bon entendeur
7  0 
Avatar de
https://www.developpez.com
Le 25/08/2012 à 0:12
C'est un sujet de débat sans fin.

La popularité de Php viens principalement du fait qu'il peut être utilisé par un néophyte souhaitant un site sur trois pages développé dans la journée, comme de professionnels l'exploitant pour développer de vrais gros logiciels.
C'est cet souplesse dans son mode d'utilisation qui a fait son adoption.

La question n'est pas de connaitre et de fixer LA méthode d'exploitation de php, mais avant tout le contexte. Il serais une perte de temps d'installer Symfony pour un site de trois pages sans back office. Il serais difficile de développer, maintenir et versionner un système intranet gérant n bases de données de x Go dans un code purement procédural sans niveau d'abstraction et de séparation des différentes couches et à cela l'OO est très bien adapté.

Son interrogation est louable, je pense que tout le monde se la pose, et ceux, régulièrement.
Tout est une question de contexte, je ne pense pas que j'y trouverais une réponse un jour.
7  1 
Avatar de jeroy
Membre habitué https://www.developpez.com
Le 26/08/2012 à 19:38
Currently I am 17, am in my last year of school and live in Berlin/Germany.
Source : http://nikic.github.com/aboutMe.html

Il doit être très content le petit de se retrouvez en une d'une gros site français de développeurs, censé s'adresser aux "professionnels de l'informatique".

L'équipe de DVP a une explication à fournir là ?
10  5 
Avatar de Matthieu Vergne
Expert éminent https://www.developpez.com
Le 30/08/2012 à 22:20
Si j'ai bien compris l'article, on parle d'utiliser des classes uniquement, pas de programmer en objet. De ce que j'en ai compris, ce qui est abusif est d'utiliser le principe de classes pour centraliser ses fonctions (qu'on appelle donc méthodes pour la peine) en lieu et place des "modules". La critique ne se situe pas sur l'utilisation de la POO. Je me trompe ?

Si j'ai raison, alors je comprends tout à fait l'auteur dans le sens où on mixe les concepts venant d'horizons différents, ce qui n'arrange rien à la compréhension du code. Soit on fait de l'objet (haut niveau) soit on fait du procédural (bas niveau). Mais on ne mixe pas des concepts pour obtenir une simple facilité technique (surtout quand on a la possibilité de faire tout aussi propre avec les concepts déjà présent), c'est du codage d'opportuniste.

Pour ma part je fais de l'objet, chaque classe a un sens concret (qui se traduira par des instances faciles à comprendre et à manipuler) et non abstrait (pour faire office de paquets de fonctions).
5  0 
Avatar de Conaclos
Nouveau membre du Club https://www.developpez.com
Le 25/08/2012 à 12:56
La pratique de l'Orienté Objet (je parle de la méthodologie) n'est pas à remettre en cause elle apporte de nombreux avantages.

En revanche la simple utilisation de ce concept comme structure de stockage de fonction (donc leur utilisation en terme de module) est une mauvaise chose. Il est préférable dans ce cas d'utiliser de simples fonctions.

Mais la déclaration de fonction ce fait de manière globale, ce qui peut poser des problèmes de conflits entre bibliothèque et de maintenance.

Quant à mettre plusieurs classe dans le même fichier je ne suis pas convaincu.
Pour moi une classe est la primitive de la modularisation orienté objet.
4  1 
Avatar de ascito
Membre éprouvé https://www.developpez.com
Le 25/08/2012 à 16:51
Les développeurs PHP seraient donc tentés d'exprimer leurs besoin au travers de méthodes, ce qui conduit à une approche orientée-classes moins naturelle que l'utilisation de fonctions.
Un code orientée-classes et pour moi à l'inverse de ce qui est dit ici, plus naturelle que l'utilisation abusive de fonctions isolées et désorganisées...

Dans une class tu y range tout de même littéralement des fonctions.

Je trouve son raisonnement étrange, et pas du tout évolutif, suis-le seul ?
4  1 
Avatar de Freem
Membre émérite https://www.developpez.com
Le 27/08/2012 à 12:01
Citation Envoyé par stailer Voir le message
Il n'y a vraiment qu'en PHP qu'on peut malheureusement se poser cette question.

En PHP, rapport à C# nous avons la "chance" d'avoir 2 modes de programmation :
1- "A l'arrache" -> procédural
2 -"Professionnel" -> objet
Allons bon... PHP serait le seul langage multi-paradigme? Il semble que l'on m'aie menti sur C++ alors. (Bon, j'imagine que tu ne parlais que des "langages web" d'un autre côté)

Quant à ta classification procédural = à l'arrache... Je trouve ça bancal.
J'aime énormément la POO, mais j'ai vu du code POO très bancal, et d'un autre côté, j'ai vu du code procédural très propre et professionnel.

Citation Envoyé par matios Voir le message
Heu, de quel prix tu parles ??

Pourquoi les fichiers physiques peuvent être inutiles ?
J'ignore de quel prix il peut parler précisément, mais, qui dit "plus de fichiers" implique effectivement un coût:
Plus d'inode, même si ce n'est que peu d'octets, le coût existe, et, à une époque, avait de l'importance.
Il y a aussi le fait que chaque fichier plus petit qu'un bloc occupera malgré tout le bloc entier. Encore une fois, perte d'espace. Et perte de vitesse, le bras mécanique du DD devant se déplacer plus: fragmentation du projet.

D'un autre côté, il est peut-être plus simple de parser un petit fichier qu'un grand: plus économe en mémoire, et contexte moins lourd.

Oui, les fichiers ont un coût, après, il est régulièrement négligeable. Ceci dis... un projet libre que je surveille - http://openmw.org/2012/07/09/week-review-14/ - à divisé par 2 le temps de compilation en corrigeant des problèmes d'inclusion inutiles ou mal placées (certes, ce n'est pas un projet PHP)

D'un autre côté, un coût plus pour le développeur:
_ fichier unique => plus long à lire, moins lisible
_ fichier unique => on ne sait pas nécessairement dans quelle classe on se trouve, ce qui peut se faire habituellement en regardant le nom du fichier

D'ailleurs, je rejoins raimbow sur le fait que l'usage des fichiers tel qu'on le connaît actuellement semble un peu... ancien. J'aurai même dit, hérité du procédural.
Après tout, les fichiers ne sont censés être qu'un support de stockage. Raisonner avec eux est certes pratique, mais je pense qu'on pourrait très bien imaginer un système différent de l'habituel 1 fichier par classe, même si dans un langage qui compile vite je ne suis pas persuadé qu'il y aurait un gain.
La ou je ne suis pas d'accord, c'est que les IDE modernes pourraient nous permettre d'abstraire la structure sur disque de nos projets.

Quant au fait: 1 module = 1 fichier, je crois que ça montre bien que cet ado est habitué à travailler sur des projets d'ampleur. Si un seul de ses programmes dépasse les 5K ligne pour une bonne raison, je serai intrigué.
Le fichier unique, c'est quand même assez ridicule, je ne comprend même pas comment une telle affirmation a pu ne pas discréditer "l'article" originel.
Ne serait-ce que pour le versionning...
4  1 
Avatar de Nathanael Marchand
Rédacteur https://www.developpez.com
Le 27/08/2012 à 17:31
Citation Envoyé par Tryph Voir le message
explique moi l'intérêt de faire une fonction qui contient une ligne de code...
les exemples à la con on peut leur faire dire ce qu'on veut, ils n'en constituent pas plus des arguments de poids.
Pas d'accord! En l'occurrence dans ce cas ca permet une indirection pour faire les traductions (enfin ca semble). Il s'avère qu'en l'occurrence cette implémentation est relativement simple mais il n'est pas impossible qu'à l'avenir elle soit plus compliquée. Ca simplifie donc le refactoring. Après c'est sur qu'il ne faut pas 12° d'indirections
3  0