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] __autoload


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut [POO] __autoload
    salut
    voila jusqu'a maintenant j'utilisais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function __autoload($class)
    {
     
    	//require_once dirname(__file__).'/lib/class/'.$class.'.php';
    }
    mais bon c'est pas tres clean dans le repertoire
    donc je voudrais faire
    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
    28
    29
    30
    function __autoload($class)
    {
    	if(!loadclass(LINK.$class.'.php'))
    	{
    		eval("
    		class $class{
    			public function __contruct(){
    				throw new Execption(\"impossible de charger la class $class.php.\"); 
    			}
    		} ");
    	}
    }
     
    et loadclass
    function loadclass($link)
    {
    	echo 'appel'.$link.'<br/>';
    	$class=basename($link,'.php');
    	if(class_exists($class,false)){
    		echo $link;
    		require_once $link;
    		return true;
    	}
    	else {
    		return false;
    		echo 'la classe n\existe pas'; 
    	}
     
    	echo $link."<br/>";
    }
    mais voila je ne passe n'y dans le if n'y dans les elses
    et la premiere erreur qui arrive c'est au premier appel d'une methode de class

    j'ai du me planter sur class_exits mais en fait je sais pas trop comment fonctionne cette fonction(juste avec le nom de la class??)

    merci

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    et ton echo appel il s'affiche ?
    c'est quoi LINK ? une constante ?
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  3. #3
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut
    Es tu sur qu'il ne passe pas dans le else parce que comme tu as mis le echo après le return, de toute facon le echo ne peux pas se voir...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    toujours la quand a besoin on besoin d'une reponse siddh (bonnes fetes)

    alors LINK est une constante
    et mon premier est appeler
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo var_dump(loadclass(LINK.$class.'.php'));
    dans mon index retourne false

  5. #5
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    comme l'a dis GregPeck, tres deux derniers echos tu les verras jamais

    D'autre part tu as une faute d'orthographe a exception dans ton throw
    Pour que le autoload marche, il faut faire un include quand meme
    ou qu'elle soit dans le include_path ...

    bonnes fetes aussi
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  6. #6
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    et pi tu peux faire un throw sans faire ta grosse magouille avec ton eval
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    oui je vien de m'en rendre compte pour mes echos
    en fait ca bloque sur class_exists

  8. #8
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    ca bloque ?
    il te dis false ou il met une erreur ?

    si ton fichier contenant la classe n'est pas inclus avant ca ne marchera pas ...

    le class_exists te dira juste si elle est bien définie dans un fichier inclus précedemment ou dans le fichier courant.
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    donc j'ai juste a metre mon include avant tester si elle existe??
    et si elle existe pas? ca se mort la queue
    dans ce cas file_exist serait plus adapter

    tu declencherai l'exception comment??

  10. #10
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    tout depend de ce que tu veux tester

    l'existence du fichier ou de la classe ....

    je te conseil de garder ton ancienne structure en mettant eventuellement un is_file (qui teste si c'est vraiment un fichier alors que file_exists teste aussi pour un dossier) qui ferais un throw sur le else.
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    un truc comme ca(pas encore tester mais ya pas de raison)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function loadclass($link)
    {
    	if(is_file($link)){
    		require_once $link;
    		$class=basename($link,'.php');
    		if(class_exists($class,false))
    			return true;
    		else 
    			throw new Exception('la class n\'existe pas');
    	}
    	else 
    		return false;
    }

  12. #12
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    la tu testeras tout comme ça effectivement
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    et en plus ca fonctionne
    merci

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

Discussions similaires

  1. [POO] C'est quoi une classe en claire...???
    Par Spack dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 26/01/2009, 15h53
  2. [POO] Comment utiliser __autoload?
    Par paragoge dans le forum Langage
    Réponses: 2
    Dernier message: 14/03/2008, 16h47
  3. Réponses: 4
    Dernier message: 16/06/2006, 10h49
  4. [langage] Pb POO perl
    Par loothoof dans le forum Langage
    Réponses: 4
    Dernier message: 26/05/2004, 12h08
  5. lier un cube à un objet (POO)
    Par Hypnos dans le forum OpenGL
    Réponses: 12
    Dernier message: 26/08/2003, 21h46

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