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 __autoload() et associé.


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 24
    Par défaut Fonction __autoload() et associé.
    Bonjour à tous,

    Voici ma question j'ai un projet plutôt conséquent avec des appels multiples à des classes. Pour "importer" ces classes j'utilise la fonction __autoload() dont voici le code :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function  __autoload($className)
    	{
     
     			require_once ('../utils/'.$className.'.class.php');
    	}
    Dois-je mettre ce code à chaque fois que je vais appeler des méthodes ou créer des objets qui appartiennent à mes classes importées? Où ne dois-je l'utiliser qu'une fois?

    Merci pour vos réponses.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    l'autoload doit être charger pour être utilisé, tu peux charger autant de classes que tu veux dument l'autoload est la

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 24
    Par défaut
    Oui mais cela pose t'il un problème de l'utiliser dans plusieurs classes d'un même projet? Ou puis juste l’appeler sans la redéfinir?

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par ABonus Voir le message
    Oui mais cela pose t'il un problème de l'utiliser dans plusieurs classes d'un même projet? Ou puis juste l’appeler sans la redéfinir?
    elle doit être définie au début de chaque script, a toi d'inclure le bon fichier après pour la définir qu'une seule fois, c'est comme un include si tu le met pas le pas le fichier va pas être la

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 24
    Par défaut
    Après avoir lu des articles que je dis ce que j'ai compris et tu me dis si j'ai faux :

    -autoload c'est une fonction magique qui à chaque fois qu'un objet est créé dans la classe la fonction autoload va charger automatiquement la classe correspondante à l'objet.

    -Autoload doit maintenant être remplace par spl_register_autoload

    Question : Mettons que je passe un objet par variable de session je récupère cet objet et appelle des méthodes dessus y aura t'il besoin que je mette la fonction autoload au début de ce fichier même si je ne créé pas d'objet?

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par ABonus Voir le message
    -autoload c'est une fonction magique qui à chaque fois qu'un objet est créé dans la classe la fonction autoload va charger automatiquement la classe correspondante à l'objet.
    l'autoload est en dehors des classes, un charge pas un objet mais une classe

    si je fais : $test = new Test();
    comme la classe Test n'existe pas si l'autolaod est définie il va allé chercher Test.php ou Test.class.php dans le dossier du script


    Citation Envoyé par ABonus Voir le message
    -Autoload doit maintenant être remplace par spl_register_autoload
    c'est faux, appeler spl_register_autoload definie spl_autoload comme autoload et spl_autoload reviens à faire

    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
    function __autoload($class_name)
    {
        $extensions = explode(',', '.inc,.php');
        $class = str_replace('\\', DIRECTORY_SEPARATOR, $class_name);
     
        foreach($extensions as $extension)
        {       
            if(file_exists($class . $extension))
            {            
                require_once $class . $extension;
                return;
            }
        }
     
        user_error(sprintf('%s(): Class %s could not be loaded', __FUNCTION__, $class_name), E_USER_ERROR);
    }

Discussions similaires

  1. Fonction __autoload non appelée
    Par simoelasimo dans le forum Langage
    Réponses: 0
    Dernier message: 11/10/2010, 16h37
  2. associer une fonction à une <div>
    Par Mike35 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 02/09/2008, 02h43
  3. Fonction associée à onclick paramétrée
    Par yves fiallet dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/09/2006, 18h30
  4. Réponses: 11
    Dernier message: 09/05/2006, 09h34
  5. Réponses: 11
    Dernier message: 03/06/2005, 15h38

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