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 pour la POO


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 363
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Il faut pensé que tu a re-déclaré la fonction spl_autoload_register qui existe déjà...

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    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
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 363
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    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

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    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
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 363
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    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

    Si la discussion est résolue, merci de cliquer sur le bouton

  7. #7
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Non ça fonctionne comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 363
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    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

    Si la discussion est résolue, merci de cliquer sur le bouton

  9. #9
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    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 : 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
    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
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 363
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    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

    Si la discussion est résolue, merci de cliquer sur le bouton

  11. #11
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    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.

Discussions similaires

  1. Bonnes pratiques pour la POO en Javascript
    Par piemur2000 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/10/2013, 15h33
  2. Tout changer pour la POO
    Par novphp dans le forum Langage
    Réponses: 2
    Dernier message: 07/02/2009, 07h38
  3. aide pour la POO
    Par yorukaze dans le forum Général Python
    Réponses: 8
    Dernier message: 04/01/2008, 10h42
  4. [POO] doc pour comparaison POO entre PHP4 et PHP5
    Par mic79 dans le forum Langage
    Réponses: 4
    Dernier message: 19/01/2007, 15h40
  5. Methodologie pour la POO
    Par afrikha dans le forum Méthodes
    Réponses: 5
    Dernier message: 26/11/2005, 03h15

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