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 :

_autoload et spl_autoload_register : une bonne habitude ? [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 220
    Par défaut _autoload et spl_autoload_register : une bonne habitude ?
    Bonjour,

    Est-ce une bonne habitude d'utiliser
    _autoload et spl_autoload_register ?

    Je n'ai pas encore fait de très longs codes.
    Mais j'ai toujours l'impression que ces méthodes
    dites magiques sont faites pour les personnes
    qui ne savent plus trop où elles en sont.

    L'important pour moi est de contracter dès le début
    de bonnes pratiques de codage. D'où ma question.

    Merci.

  2. #2
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    comme toujours, je pense qu'utilisé à bonne escient c'est très bien.

    le plus souvent cependant, on créé des fichiers de config en cascade regroupant les require nécessaires. ensuite, au niveau des classes, on est propre. cela permet de savoir a quel niveau tel ou tel classe est chargée et c'est assez simple à mettre en œuvre (c'est aussi une bonne pratique).

    la seule mauvaise pratique est d'éparpiller des require partout dans le code...

  3. #3
    Membre très actif Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Par défaut
    Citation Envoyé par éric1 Voir le message
    Je n'ai pas encore fait de très longs codes.
    Mais j'ai toujours l'impression que ces méthodes
    dites magiques sont faites pour les personnes
    qui ne savent plus trop où elles en sont.
    Il y a des cas où il vaut mieux privilégier autoload.

    En règle général, on n'a pas vraiment besoins de autoload.
    Chaque script à une série de include ou require en début de fichier pour s'assurer que les dépendances sont chargées.

    Genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    require_once 'BaseClass.php'
    require_once 'special_functions.php'
     
    class Derived extends BaseClass { }
    Un problème qui peut survenir est si un fichier se trouve requis par beaucoup d'autres fichiers dans le projet. Cela arrive très fréquement dans les projets un peu conséquents ou les libraires/frameworks. On aura alors des dixaines de require_once pour le même fichier répartis dans tout autant de fichiers différents (et là on comprend que le _once est important).

    Un autre problème est que parfois on ne sait pas à l'avance quel fichier on va devoir inclure et on ne peut dès lors pas faire de suppositions quant aux dépendances requises par le fichier (à moins que ce dernier balance toute une série de require_once à nouveau).

    php étant un langage de script dynamique (pléonasme?) l'arrivée d'autoload dans php 5 a eu pour but de faciliter le chargement de fichiers à la volée et d'améliorer les performances dans certains cas. Car il faut savoir que require(_once) ou include(_once) sont "couteux" en temps de traitement. Déjà, trouver le fichier réel, qui peut être au fin fond de l'include_path si on ne précise pas de chemins absolus (php a tout de même un mécanisme de cache pour ne pas trop pénaliser ces opérations). La vérification du "_once", le fait que le fichier n'est pas déjà inclu, repétée des dixaines et des dixaines de fois est aussi couteux. Au final, on se retrouve avec des centaines de vérifications et des centaines de classes chargées dans des cas extrèmes (genre: http://framework.zend.com/wiki/displ...ommentId=43453 ).

    Le big probo, c'est que si les fonctions d'autoload sont mal implémentées, on ne va pas du tout gagner en performance, cependant, on sera probablement toujours gagnant en terme de nombres de classes chargées à un instant T et donc de mémoire utilisée. Ce n'est pas négligeable non plus pour des projets conséquents (voir le liens précédent).

    Il faut donc je pense utiliser avec escient l'autoloading et ne pas y avoir recourt systématiquement.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 220
    Par défaut
    Je suis toujours sensible à la rapidité d'un code... (sujet intéressant).

    Merci pour vos réponses.

    Je rouvrirai la discussion si besoin.

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

Discussions similaires

  1. Apprendre avec de bonnes habitudes : Ada ou Pascal ?
    Par steiner81 dans le forum Débuter
    Réponses: 15
    Dernier message: 03/06/2007, 00h38
  2. [XML/XSL] Est ce que je pars sur une bonne base ?
    Par dinbougre dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/12/2004, 23h31
  3. [CR] trouver une bonne doc
    Par ina dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 17/06/2004, 17h43
  4. Réponses: 9
    Dernier message: 24/05/2003, 10h25

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