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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    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 Expert 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
    Par défaut
    l'inclusion peut se faire automatiquement, regarde là :
    http://php.net/autoload

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    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 expérimenté 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
    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

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    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 expérimenté 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
    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.

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