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 :

autoloader : point d'entrée unique ? [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 470
    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 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut autoloader : point d'entrée unique ?
    Bonjour,

    pour vérifier la nécessité d'avoir un point d'entrée unique si on utilise l'autoloader codé par rawsrc, j'ai codé un test sans redirection vers un point d'entrée unique, et ça marche.

    Donc pas sûr de cette nécessité...

    Voici mon test :
    _classes
    _____Classe1
    __________Classe1.php
    _____Classe2
    __________Classe2.php

    autoloader.php
    index.php

    Classe1.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    namespace _classes\Classe1;
    class Classe1 {
    private $Attribut;
     
    public function __construct() {}
     
    public function SetAttr($val) {
        $this->Attribut=$val;
    }
    public function DispAttr() {
            echo '<br/>'.$this->Attribut;
        }
    }
    ?>

    Classe2.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    namespace _classes\Classe2;
    class Classe2 {
    private $Attribut;
     
    public function __construct() {}
     
    public function SetAttr($val) {
        $this->Attribut=$val;
    }
    public function DispAttr() {
            echo '<br/>'.$this->Attribut;
        }
    }
    ?>

    autoloader.php :
    Code php : 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 Autoloader {
    static function register() {
        define('DIR_ROOT', __DIR__.DIRECTORY_SEPARATOR);
     
        $autoloader = function($full_class_name) {
            // on prépare le terrain : on remplace le séparteur d'espace de nom par le séparateur de répertoires du système
            $name = str_replace('\\', DIRECTORY_SEPARATOR, $full_class_name);
            // on construit le chemin complet du fichier à inclure :a
            // il faut que l'autoloader soit toujours à la racine du site
            $path = DIR_ROOT.$name.'.php';
     
            // on vérifie que le fichier existe et on l'inclut
            // sinon on passe la main à une autre autoloader (return false)
            if (is_file($path)) {
                include $path;
                return true;
            } else {
                return false;
            }
        };
        spl_autoload_register($autoloader);
        }
    }
     
    Autoloader::register();

    index.php :
    Code php : 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
    <?php
    //autoloading
    include_once 'Autoloader.php';
     
    use _classes\Classe1\Classe1;
    use _classes\Classe2\Classe2;
     
    $Attr1=new Classe1();
    $Attr2=new Classe2();
     
    $Attr1->SetAttr(5);
    $Attr1->DispAttr();
     
     
    $Attr2->SetAttr(7);
    $Attr2->DispAttr();
    ?>

    et ça donne l'affichage :
    5
    7
    Ca prouve pas qui y a pas besoin de point d'entrée unique ?

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut Laurent,

    dans ton exemple, ton fichier index.php est l'unique point d'entrée du site. En gros, le code d'exemple ne correspond pas du tout à ta conclusion.
    Relis le passage sur l'utilité d'un unique point d'entrée sur mon blog par ici.

    Le but c'est que quand tu fais de l'objet, tu puisses avoir ton environnement d'exécution automatiquement et facilement chargé avant de traiter la requête.
    Relis mon explication et remets là dans le contexte de ton application, tu devrais voir les différences immédiatement.

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    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 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Bonsoir rawsrc,

    j'ai compris en relisant ton blog/partie théorie. Tu m'avais déjà conseillé de relire ton blog mais j'avais relu la partie pratique !
    Si t'utilises l'autoloader, c'est que tu dois avoir défini un unique point d'entrée du site comme je l'ai expliqué sur mon tuto MVC.
    ici, tu parles de l'autoloader, mais si j'ai bien compris, ça concerne tout l'environnement d'exécution (autoloader, pdo, définition des constantes, etc) dont on veut faciliter l'accès. C'est bien ça ?

    Revenons au point d'entrée unique du site ; j'ai créé pour cela un fichier .htaccess placé à la racine du site comme tu l'as donné dans ton blog :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    RewriteEngine on
    RewriteCond %{REQUEST_URI} /(index)(\..{3,4})?$ [NC]
    RewriteRule ^.* http://dev.mvc.fr [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !^/css/.*$
    RewriteCond %{REQUEST_FILENAME} !^/js/.*$
    RewriteCond %{REQUEST_FILENAME} !^/img/.*$
    RewriteRule . /index.php [QSA,L]
    mais si je mets dans mon navigateur http://localhost/eis_oo2/index.php (l'URL de mon site, en local), il redirige bien vers http://dev.mvc.fr mais erreur 502. Pourquoi ?

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

Discussions similaires

  1. [SP-2007] [WSS3] Architecture pour point d'entrée unique
    Par linati dans le forum SharePoint
    Réponses: 1
    Dernier message: 14/04/2011, 09h23
  2. Avoir un point d'entrée unique pour tous mes serveurs
    Par aureliensm dans le forum Autres systèmes
    Réponses: 0
    Dernier message: 22/04/2010, 10h53
  3. Point d'entrée unique via htaccess
    Par Nalfeim dans le forum Langage
    Réponses: 1
    Dernier message: 02/07/2009, 14h02
  4. Export DLL et noms des points d'entrée
    Par Dozer dans le forum MFC
    Réponses: 5
    Dernier message: 03/06/2005, 09h49
  5. visualiser les points d'entrée d'un dll
    Par DenisLorrain dans le forum Windows
    Réponses: 4
    Dernier message: 06/07/2004, 00h20

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