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 :

[POO] Inclusion des classes


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Points : 193
    Points
    193
    Par défaut [POO] Inclusion des classes
    Bonjour à tous,

    Je viens recueillir vos conseils quant à la réalisation d'un site avec php5-POO. Actuellement je réalise un site que j'ai développé de la manière suivante:

    les fichiers .css, les fichiers .php contenant les blocs html et des class .php qui incluent les contenus dans les blocs html.

    Suite à cette méthode de structuration, je me retrouve avec plusieurs includes dans mes pages .php qui contiennent mes blocs html pour inclure mes class nécessaires à chaque page.

    Comment puis-je faire pour éviter cela ?

    Merci à tous pour vos réponses.

  2. #2
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    l'inclusion peut se faire automatiquement, regarde là :
    http://php.net/autoload
    GNAP !

  3. #3
    Membre habitué Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Points : 193
    Points
    193
    Par défaut
    Merci pour ce lien,
    A la lecture du descriptif cela à l'air d'être intéressant, mais à la lecture des exemples cela ressemble à une fonction classique.

    Peux-tu m'expliquer le fonctionnement s'il te plait ?

  4. #4
    Membre averti Avatar de sayari.dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2010
    Messages : 142
    Points : 300
    Points
    300
    Par défaut
    Pour éviter de charger tous les fichiers à la fois, tu peux doter ton script d'une fonction __autoload pour ne charger les fichiers de définition des classes qu'en cas de nécessité

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    function __autoload($class) {
       switch($class){
           case 'maClasseA' : require_once 'fichier_de_definition_de_A.php'; break;
           case 'maClasseB' : require_once 'fichier_de_definition_de_B.php'; break;
           ...............
           default: die($class . ' ne peut pas être instanciée');
    } 
    }
    ?>
    Ensuite tu peux coder sans soucis de chargement de fichiers. Tu créé tes objets comme tu le veux et le script charge automatiquement les fichiers dont il a besoin
    C'est en faisant n'importe quoi qu'on devient n'importe qui

  5. #5
    Membre habitué Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Points : 193
    Points
    193
    Par défaut
    Merci pour ta réponse,

    mais je ne comprends toujours pas le fonctionnement de cette fonction, qui ressemble fortement à une fonction classique. A quoi correspond le $class, ça pourrait être le nom de la page que je passe en argument et en fonction de l'argument la fonction inclue la ou les class nécessaires que j'aurais spécifié dans l'algo ? et au lieu d'inclure toutes mes class manuellement j'inclue juste la fonction, c'est ça ???

    Je suis en mode boulet ce soir.DSL

  6. #6
    Membre averti Avatar de sayari.dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2010
    Messages : 142
    Points : 300
    Points
    300
    Par défaut
    Ah, d'accord.
    Au fait si tu instance une classe non définie, php cherche une fonction __autoload que tu l'as définis. S'il ne la trouve pas, une erreur fatale sera déclenchée et l'exécution du script arrêtera. S'il la trouve (tant mieux ), il l'appelle avec le nom de la classe que ton script essaie d'instancier comme paramètre

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $a = new maClasseNonDefinie();
    php appellera la fonction __autoload avec en paramètre 'maClasseNonDefinie'. Tu dois alors traiter ces cas au niveau de la fonction __autoload.
    C'est en faisant n'importe quoi qu'on devient n'importe qui

  7. #7
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Pourquoi ne fais tu pas un essai ?
    C'est plus simple qu'un grand discourt.

    Et puis, oui, le __autoload() est une simple fonction. Et alors ?
    Ceci dit, pas tant que ça, elle fait partie des fonctions dit "magique".

    Pour ma part, l'exemple de code que donne la doc me semble explicite (suivie des explications) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function __autoload($class_name) {
        require_once $class_name . '.php';
    }
     
    $obj  = new MyClass1();
    $obj2 = new MyClass2();
    A l'usage, on se contente d'instancier les classes, c'est la fonction qui se charge de les inclure.
    Tu remarqueras qu'il est nul besoin de faire "appel" à la fonction __autoload(), c'est z'automatique, c'est pour ça qu'elle est magique.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  8. #8
    Membre habitué Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Points : 193
    Points
    193
    Par défaut
    Merci php.dev pour ta réponse,

    Il me semble avoir pigé, il est temps lol, et merci RunCodePhp pour ton intervention. Perso j'ai pas vraiment vue ce genre d'explication dans la doc php version anglaise, mais faut avouer que je suis pas un pro en langue étrangère.

    Merci à vous trois pour vos réponses. Je m'en va tester cela.

    Bonne journée.

  9. #9
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    Citation Envoyé par xess91 Voir le message
    Perso j'ai pas vraiment vue ce genre d'explication dans la doc php version anglaise, mais faut avouer que je suis pas un pro en langue étrangère.
    je crois que le site à un problème pour détecter la langue à afficher
    essaye ce lien pour avoir la page en français :
    http://fr2.php.net/autoload
    GNAP !

  10. #10
    Membre habitué
    Inscrit en
    Juillet 2003
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 196
    Points : 165
    Points
    165
    Par défaut auto moto
    Bonjour,

    J'ai du mal à comprendre la difference entre spl_autoload et __autoload()

    Si quelqu'un a l'amabilité d'apporter une réponse.

    thk.

  11. #11
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    Citation Envoyé par LDDL Voir le message
    Bonjour,

    J'ai du mal à comprendre la difference entre spl_autoload et __autoload()

    Si quelqu'un a l'amabilité d'apporter une réponse.

    thk.
    - Soit tu n'utilises pas spl_autoload_register() et dans ce cas tu dois fournir toi même l'implémentation de __autoload() (coder le corps de la fonction en php),
    - Soit tu utilises spl_autoload_register(). Si aucun argument n'est fourni à cette fonction lors de son appel, php va "enregistrer" lui-même une fonction d'autoloading par défaut qui se trouve être nommée spl_autoload() (et qui est codée en C)

Discussions similaires

  1. [POO] d’encapsulation des classe
    Par amazircool dans le forum Langage
    Réponses: 6
    Dernier message: 17/09/2007, 18h33
  2. [POO] Héritage des classes
    Par mic79 dans le forum Langage
    Réponses: 27
    Dernier message: 09/03/2007, 20h02
  3. [POO] Organisation des classes PHP
    Par AsQuel dans le forum Langage
    Réponses: 6
    Dernier message: 16/02/2007, 09h09
  4. [POO] conception des classes
    Par poukill dans le forum C++
    Réponses: 229
    Dernier message: 19/07/2006, 08h28
  5. [POO] faire des classes en php
    Par gromit83 dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2006, 16h10

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