+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Débutant
    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    4 669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 4 669
    Points : 1 953
    Points
    1 953

    Par défaut fonction__autoload pour la POO

    Bonjour,

    plusieurs questions à propos de cette fonction (je débute en POO) :

    - D'abord j’ai lu ça : La fonction spl_autoload_register() fournit une alternative plus flexible pour le chargement automatique de classes. Pour cette raison, l'utilisation de la fonction __autoload() n'est plus encouragée et pourrait devenir obsolète, voire être supprimée dans le futur.
    Mais
    Code :
    1
    2
    3
    4
     function spl_autoload_register($class_name) { // appelée dès qu'une classe est pas trouvée
    //function __autoload($class_name) { // appelée dès qu'une classe est pas trouvée
    require(strtolower($class_name)."_class.php"); //strtolower pour unix
    }
    Provoque une erreur :
    Fatal error: Cannot redeclare spl_autoload_register() in D:\divers\boulot\formation_PHPPOO\index.php on line 5
    que faut-il en penser ?

    - cette fonction est placée dans le index.php de mon application ; est-ce que ça suffit pour qu'elle soit appelée dès lors que n'importe où on souhaite utiliser une classe qui n'est pas encore définie ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  2. #2
    Membre actif Avatar de John Blobsmith
    Inscrit en
    avril 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 148
    Points : 152
    Points
    152

    Par défaut

    Il faut pensé que tu a re-déclaré la fonction spl_autoload_register qui existe déjà...

  3. #3
    Responsable Développement Web


    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    juin 2008
    Messages
    22 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2008
    Messages : 22 568
    Points : 87 732
    Points
    87 732
    Billets dans le blog
    4

    Par défaut

    J'imagine que tu essayes de faire un autoload sur une classe déjà chargée via include par exemple...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Débutant
    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    4 669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 4 669
    Points : 1 953
    Points
    1 953

    Par défaut

    Ca, je l'avais compris ! Mais comme je viens de découvrir l'existence de cette fonction, je ne l'ai pas définie ailleurs...
    Et au sujet de ma 2e question ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  5. #5
    Membre actif Avatar de John Blobsmith
    Inscrit en
    avril 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 148
    Points : 152
    Points
    152

    Par défaut

    Citation Envoyé par laurentSc Voir le message
    Ca, je l'avais compris ! Mais comme je viens de découvrir l'existence de cette fonction, je ne l'ai pas définie ailleurs...
    Et au sujet de ma 2e question ?
    Ben il faut que tu utilise la fonction spl_autoload_register et non que tu la définisse...

  6. #6
    Débutant
    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    4 669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 4 669
    Points : 1 953
    Points
    1 953

    Par défaut

    Donc, comme ça marchait avant, il ne faut pas simplement remplacer __autoload ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  7. #7
    Membre actif Avatar de John Blobsmith
    Inscrit en
    avril 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 148
    Points : 152
    Points
    152

    Par défaut

    Non ça fonctionne comme ça :
    Code :
    1
    2
    3
    4
    5
    6
     
    function my_autoloader($class) {
        include 'classes/' . $class . '.class.php';
    }
     
    spl_autoload_register('my_autoloader');
    voir la doc :
    http://fr2.php.net/manual/fr/functio...d-register.php

  8. #8
    Débutant
    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    4 669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 4 669
    Points : 1 953
    Points
    1 953

    Par défaut

    Merci pour ton explication ; je pensais justement regarder la doc et leur exemple est très clair.

    J'oubliais ; et ma 2e question :
    cette fonction est placée dans le index.php de mon application ; est-ce que ça suffit pour qu'elle soit appelée dès lors que n'importe où on souhaite utiliser une classe qui n'est pas encore définie ?
    J'ai pas trouvé réponse dans la doc...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  9. #9
    Membre actif Avatar de John Blobsmith
    Inscrit en
    avril 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 148
    Points : 152
    Points
    152

    Par défaut

    Ça semble être le but. Tu enregistre tes class dans l'autoload et si une class n'est pas encore chargé il va voir dans l'autoload.

    Cet exemple répond à ta question :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <?php
     
        class ClassAutoloader {
            public function __construct() {
                spl_autoload_register(array($this, 'loader'));
            }
            private function loader($className) {
                echo 'Trying to load ', $className, ' via ', __METHOD__, "()\n";
                include $className . '.php';
            }
        }
     
        $autoloader = new ClassAutoloader();
     
        $obj = new Class1();
        $obj = new Class2();
     
    ?>
     
    Output:
    --------
    Trying to load Class1 via ClassAutoloader::loader()
    Class1::__construct()
    Trying to load Class2 via ClassAutoloader::loader()
    Class2::__construct()
    up

  10. #10
    Débutant
    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    4 669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 4 669
    Points : 1 953
    Points
    1 953

    Par défaut

    Merci pour ta réponse, mais pourquoi passes-tu aussi $this à la pile de l'autoload ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  11. #11
    Membre actif Avatar de John Blobsmith
    Inscrit en
    avril 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 148
    Points : 152
    Points
    152

    Par défaut

    C'est le callback, a priori quant t'es dans une class tu utilise cette syntaxe pour spécifier la class courante.

    voir la doc :
    http://php.net/manual/fr/language.types.callable.php

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •