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

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 24
    Points : 9
    Points
    9
    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 éminent sénior

    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
    Points : 10 727
    Points
    10 727
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 24
    Points : 9
    Points
    9
    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 éminent sénior

    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
    Points : 10 727
    Points
    10 727
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 24
    Points : 9
    Points
    9
    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 éminent sénior

    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
    Points : 10 727
    Points
    10 727
    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);
    }

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Ok, merci de m'avoir un peu éclairé sur le sujet par contre tu as une petite idée pour la question que j'ai posé plus haut?

    Ah oui aussi l'autoload n'est utilisable que dans un contexte de développement avec framework ou peu importe? Je veux dire est-ce qu'il faut respecter une hierarchie spéciale au niveau des dossiers pour pouvoir utiliser l'autoload? Et surtout ma question est combien de fois dois-je l'utiliser? Je vais essayer de préciser ma question :

    Je te décris un peu ma hiérarchie :

    -SiteV2
    • admin

    • configuration

    • ...

    • utils

    index.php
    inscription.php



    Je créé des objets seulement dans mon dossier configuration mais j'utilise des méthodes de ces objets dans les fichiers index.php, inscription.php, configuration/index.php,... Où selon toi devrais-je faire mon autoload si je ne dois en faire qu'un seul? Dois-je en faire dès que j'appelle une méthode d'un objet? Et puis je faire par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	function  __autoload($className)
    	{
     			include_once ('../utils/'.$className.'.class.php');
    	}	
    	include_once('../utils/labosUtils.php');
    	include_once('../utils/utils.php');

  8. #8
    Expert éminent sénior

    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
    Points : 10 727
    Points
    10 727
    Par défaut
    l'autoload par default celui de SPL, est surtout utile avec les Namespaces

    si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $test = new My\Framework\Test();
    il va aller cherche le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    My
        Framwork
            Test.php
    après tu peux faire toi même ton __autoload
    au niveau de l'emplacement ca depend de ton site, si il est bien fait le charger qu'une seul fois suffis (par exemple si tout passe par index.php)
    Sinon tu le met dans un fichier ooù tu fera un include dessus a chaque fois que t'en a besoin


    si t'as un dossier avec toutes tes classes tu peu faire un autoload dessus

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Ok je commence à y voir un peu plus clair, je reviendrais vers toi si j'ai besoin d'aide. : )

    Merci pour ton aide.

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