IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fonction ou méthode statique [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut Fonction ou méthode statique
    Bonjour,

    Je me pose une petite question concernant la conception de mon application.

    J'ai plein de petites fonctions "couteau suisse" : formatage de date, manipulation de strings, affichage conditionnel de balises... :

    Jusqu'à présent, toutes ces fonctions se trouvaient dans un fichier de fonctions...

    J'ai entrepris de ramener ces fonctions dans une classe DAO, et pour la très grande majorité d'entre elles, je les déclare static afin de pouvoir les appeler de n'importe où et sans devoir instancier ma classe DAO.

    Y'a-t-il un intérêt ? Si oui lequel, car je me demande si j'ai pas perdu du temps et si mon fichier de fonctions n'était finalement pas si malcommode que cela !

    merci de votre aide !

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Je ne comprends pourquoi tu parles de DAO alors que tes fonctions sont de petits utilitaires qui n'utilisent pas d'acces aux données de la base.

    Tu aurais du les laisser dans un fichier d'utilitaires ou voir même plusieurs fichiers contenant chacun une même classe d'utilitaires (au passage, il existe maintenant une classe Date).

    Edit: j'espère que l'USAP va aller mieux dans les prochaines semaines (quoique je préfère l'ASM)

  3. #3
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    DAO, c'est le nom de ma classe, rien de plus. J'aurai pu l'appeler Toto... (apparemment, je l'ai mal nommée )...

    Tu aurais du les laisser dans un fichier d'utilitaires ou voir même plusieurs fichiers contenant chacun une même classe d'utilitaires
    Si je comprends, tu me conseilles de faire une ou plusieurs classes comportant des méthodes "utilitaires" d'un même sujet (date, calcul...) ?

    j'espère que l'USAP va aller mieux dans les prochaines semaines
    Faut dire que le calendrier ne leur est pas super favorable. Mais ils ont une belle équipe et particulièrement 2 centres de folie (Mafi / Piukala), ils devraient remonter rapidement (en supposant que la guigne des blessés s'arrêtent)

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    DAO, c'est le nom de ma classe, rien de plus. J'aurai pu l'appeler Toto... (apparemment, je l'ai mal nommée )...
    C pour celà que tu as eu peu de réponses, les gens ont vu DAO et sont partis en courant s'ils ont pensés au DAO comme autocad ou aussi au DAO pour implémenter une nouvelle couche d'orm comme doctrine par exemple. Bref hard.

    Si je comprends, tu me conseilles de faire une ou plusieurs classes comportant des méthodes "utilitaires" d'un même sujet (date, calcul...) ?
    Excuses-moi, je voulais dire pas de classe mais de fichier avec des include_once en fonction des utilitaires demandé, pour moi, je laisserais tomber l'idée de passer par ta méthode si tu restes sur des petites fonctionnalités.

    Pour l'USAP, effectivement pas de chance sur les blessés , je vous souhaite de remonter mais pas trop vite et pas au dessus de l'ASM

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    Si tu as un ensemble de petite fonctions utilitaire sans réel rapport , c'est pas non plus une mauvaise idée de les garder sous forme de fonctions et d'inclure ce fichier de fonctions là ou tu en as besoin.

    Faire des classes "helper" static n'a de sens que si tu peux regrouper un nombre de fonctions conséquent dans un même helper

  6. #6
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    OK merci du conseil...
    Je vais donc regrouper les méthodes utilitaires par catégories, les mettre dans des fichiers de fonction à inclure au besoin...

    Petites questions subsidiaires :

    J'ai une classe Ecriture qui permet de définir une écriture à facturer (taux, temps, dossier à laquelle elle appartient, devise, personne qui facture...).

    L'un des écrans de mon application est l'affichage d'une ensemble d'écritures.

    Pour le moment, j'ai créé une classe Application avec la méthode AfficheEcriture() qui boucle sur les résultats d'une requête SQL, mais je me demande si c'est bien la façon la plus simple et pratique de faire ?

    Déjà, à chaque ligne de ma requête, comme il ne s'agit que d'affichage, ai-je vraiment intérêt à instancier Ecriture ? De plus, n'est-il pas plus logique de mettre la méthode AfficheEcriture dans la classe Ecriture ?

    Merci encore de tes conseils !

    ---

    Clermont, Toulon et Toulouse sont largement au-dessus. L'USAP se battra avec Castres, le Racing et le SF pour une place en Hcup et se sera déjà pas mal... Mais perso, j'ai vraiment aimé la façon dont il se sont défoncés jusqu'au bout à Clermont malgré les blessures, le score... et avec un excellent état d'esprit... On était loin des chamailleries Le Corvec / Cudmore... pourvu que ça dure !

  7. #7
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    Faire des classes "helper" static n'a de sens que si tu peux regrouper un nombre de fonctions conséquent dans un même helper
    Ok, mais quel est, dans ce cas, l'avantage d'une classe de méthodes static sur un fichier de fonctions ?

  8. #8
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Je laisse de côté la classe 'helper', je connais pas trop ...

    Déjà, à chaque ligne de ma requête, comme il ne s'agit que d'affichage, ai-je vraiment intérêt à instancier Ecriture ? De plus, n'est-il pas plus logique de mettre la méthode AfficheEcriture dans la classe Ecriture ?
    Pour l'affichage, tu peux rester sur chaque ligne d'une requête sans passer par les classes ... Pour la méthode, bien que nous ne connaissons pas ta méthodologie, comme ça à vue sur le nom, je prendrais une méthode AfficheEcritures (avec le s) dans la class Apllication pour passer en revue toutes les écritures et puis une méthode AfficheEcriture dans la class Ecriture pour effectivement un affichage propre.

    Pour le Rugby, je donne bien Toulon pour une bonne saison (à voir), maintenant pour l'usap, je dirais que le B.O sera dur à passer.

  9. #9
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    En effet,
    Application::AffichageEcritures et Ecriture::AffichageEcriture seraient logique.
    Maintenant cela nécessite d'instancier Ecriture pour chaque résultat de la requête... Pour un simple affichage, je trouve cela très lourd, d'autant que l'affichage des écritures reste sensiblement identiques pour tous les résultats...

    A moins d'utiliser mysqli_fetch_object... à réfléchir...

    ---

    Moi aussi je vois bien Toulon ! Ils sont vraiment énormes cette saison... En espérant que la concurrence Michalak (recruté comme ouvreur) / Wilko ne joue pas en défaveur de l'équipe...

  10. #10
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    Citation Envoyé par grinder59 Voir le message
    Ok, mais quel est, dans ce cas, l'avantage d'une classe de méthodes static sur un fichier de fonctions ?
    Dans une application full objet , avoir des classe static permet de profiter de l'autoloader et de rester dans l'esprit de l'application.

  11. #11
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    ...profiter de l'autoloader...
    ok, merci !

  12. #12
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    En fait, si tu veux utiliser un affichage Html sur un simple tableau contenant les lignes des écritures, restes sur un affichage ligne à ligne sans passer par tes classes. Sinon, pour l'utilisation transparente dans l'application pour un affichage dédié aux écritures tu peux utiliser les deux méthodes comme tu as dis. Les méthodes contiendront tout pour l'affichage et la gestion des écritures dans la base (ça ressemble un peu aux beans dans Java) en fait tu auras une collection d'objet ecriture en mémoire et dans le controleur tu pouras aisement modifier les objets puis sauver toute la collection.

    Dans ton cas je pense que la première solution est la mieux,

  13. #13
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    Dans ton cas je pense que la première solution est la mieux,
    Je le pense aussi, même si je vais me laisser le temps de la réflexion...

    Merci !

  14. #14
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    oui

    et en même temps ya des gens qui critiquent ça. mais moi je n'y vois pas de mal de détourné l'autoloader pour ça. y avait une actu pour ça. moi j'aime bien les classes sac à fonction.

  15. #15
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Il y a quand même deux arguments qui peuvent inciter à préférer la class « Helper » au fichier de fonctions à inclure.

    1) regrouper un ensemble de fonctions sous forme de méthodes statiques d'une classe « helper » revient à leur attribuer explicitement un espace de noms, et à diminuer les risques de conflits de noms. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyHelperClass::myMethod();
    2) On peut factoriser du code de ces méthodes statiques dans une autre méthode sans qu'elle ne soit appelable, il suffit de la déclarer private dans la classe (elle devra par contre être également déclarée static). Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class MyHelperClass {
     
    public static function a() {
      ...
      self::c();
      ...
    }
     
    public static function b() {
      ...
      self::c();
      ...
    }
     
    private static function c() {
      ...
    }
     
    }
    Dans un simple script contenant les fonctions, la fonction c() pourrait être appelée alors qu'elle n'est pas censée l'être.

  16. #16
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    Arguments intéressants, merci à tous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Dynamic link et Méthode statique
    Par Higestromm dans le forum C++
    Réponses: 2
    Dernier message: 19/05/2006, 22h07
  2. Pthreads, méthode statique ?
    Par tibouchou dans le forum C++
    Réponses: 4
    Dernier message: 15/03/2006, 21h51
  3. Pointeur de fonctions sur méthode
    Par Glosialabolas dans le forum C++
    Réponses: 9
    Dernier message: 04/12/2005, 14h55
  4. [C#] interface, méthodes statiques ?
    Par gmonta dans le forum C#
    Réponses: 6
    Dernier message: 02/12/2005, 10h27
  5. [Singleton] Différences avec méthodes statiques
    Par Franche dans le forum Design Patterns
    Réponses: 1
    Dernier message: 26/02/2003, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo