fonctions ou méthodes statiques ?

Petit nouveau ! | 3 Messages

06 sept. 2012, 09:26

Bonjour,

je développe une application assez complexe et je me pose la question suivante :

pour des petits traitements simples (calcul, formatage de données, génération conditionnelle de balises html...) est-il mieux de faire un fichier de fonctions ou une classe avec des méthode statiques ?

Quels sont les avantages / inconvénients de l'une ou l'autre des méthodes ?

Merci de vos avis !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 sept. 2012, 09:54

salut,


cela dépend de :
  • l'architecture de ton projet : procédurale ou POO
  • de tes besoins
  • de la version de php :)
Si tu ne fait que du procédural ne t'emmerde pas avec une classe aucun intérêt.
Répartie correctement tes besoins, regarde ce qui est ré employable ou pas, si c'est le cas tu peux faire une fonction sinon ce n'est pas la peine (principe valable en poo).

Des calculs générique c'est assez spéciale, faudrait être plus clair (pas besoin de fonction pour faire une addition :) ).

Regarde aussi si tes fonctions n'existe pas déjà.

Si ton projet est entièrement orienté POO :
Il faut voir qu'elle sont les possibilité de ré emplois de la chose.
  • si aucune méthode dans la classe
  • si possible alors une classe utilitaire est envisageable, voir l'utilisation
detrait qui semble la meilleur manière de créer du code générique ré employable.

Attention à bien architecturer ton projet, l'affichage ne doit pas être mélangé avec les classes métiers, sinon c'est la merde.
Et dans ce cas tu peux très bien prévoir une classe (ou des classes issues d'une interface) qui gère le rendu, un "renderer tableaux" tu passe un tableau de donnée, un tableau qui décrit ce que tu veux (nombre de colonne, entête ou pas et ce qu'il y a dedans (peux être fait aussi avec des accesseur), et un méthode qui génère une table html, idem pour les composants.

Pour le formatage des données un traits peux être utilisé dasn les classes de rendu.
Une classe "utilitaire" avec des méthodes statiques pourquoi.
Attention à ce genre classe ça finis souvent par être un four tout immonde qui n'a plus rien à voir avec le modèle :).

En POO on parle d'entité et code "générique" ré employable, seule le code métier est spécifique (et encore).

Par exemple PDO est utilisable quelque soit le SGBD, tu as une classe qui utilise surement d'autre (dont tu te fou au final) qui elles sont spécifique au drivers choisis (oracle, sql etc).

Si tu part un modèle MVC tu ne devrait pas trop de mal à répartir la chose.

Les deux modèles se défendent, cela dépende de tes compétences et affinité. Je dirais aussi de la complexité du projet que tu souhaite mener. Sans vouloir dénigrer quoi que ce soit, ce n'est pas la penie d'utiliser un framework genre zend framework, pour un simple blog. tu fera plus simple et plus rapide avec des chose à toi en procédurale. :mrgreen:


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 3 Messages

06 sept. 2012, 10:03

Merci de tous tes conseils...

En fait, je convertis une applications procédurale en objet afin de la réorganiser et de factoriser certaines parties. Je n'ai pas d'impératif, ni d'affinités particulières (petite préférence toute de même pour l'objet). Je vais étudier tes réponses, mais de ce que j'en comprends, il ne semble pas qu'il y ait de méthode idéale...

fichier(s) de fonction ? classe utilitaire ? je ne suis convaincu ni par l'une ni par l'autre des solutions... Je vais aller jeter un coup d'oeil du côté des traits... (si ma version de php le permet !)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 sept. 2012, 10:51

le tout c'est c'est d'être logique, soit l'un soit l'autre mais les deux c'est vite le merdier.


il n'y aucune raison de "faire de la poo" juste pour "faire de le poo" :mrgreen:
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 2577 Messages

06 sept. 2012, 11:36

Bonjour,

J'ai tendance à faire une classe d'utilitaire, mais c'est une conséquence de ma manière de nommer les fonctions en procédurale (genre date_X(), db_X()...).
Passer à date::X() m'a sembler plus "joli" et ca me permet d'utiliser l'auto-load des classes.