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

Bibliothèques et frameworks PHP Discussion :

Class Loader => simple register directory


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut Class Loader => simple register directory
    je voudrais avoir votre avis, sur le code qui va suivre,
    vous pouvez tester PHP 5.2, ca fonctionne, mais j'ai besoin d'avis sur la mise en forme du code. Il y a peu être des choses plus simple, et je ne suis pas au courant.
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
     
    <?php
    class Loader{ 
     
    	protected static $_directory;
    	private static $_erreurs;
     
    	public function register($name,$dir,$ext='php'){
     
    		if(isset($this->directory->$name)){self::messageErreur("Name $name already exist in Loader::directory"); return;}
     
     		$this->directory->$name->root      = $dir;
    		$this->directory->$name->extention = $ext;
    		self::$_directory = $this ;
     		spl_autoload_register(array($this,'__autoload'),true);
     
    		return $this->directory->$name;
     	}
     
    	public function unregister($name){
     		unset($this->directory->$name); 
    		return $this;
     	}
     
    	private function __call($class,$null=null)
    	{
    		try{
     			$erreur    =  true;
     			foreach ($this->directory  as $property ) { 
    				$ext       = $property->extention;
    				$path      = self::getPath($class);
    				$file      = $property->root.$path.'/'.$class.'.'.$ext;
    				if(file_exists($file)){
    					require_once $file;
    					$erreur = false;
    				} 
    			}
    			if($erreur){throw new Exception("File $class not found , in Loader::directory ");}
    		}
    		catch (Exception $e) {
    			self::messageErreur($e); 
    		}
     	}
    	public static function directory(){
    		return self::$_directory;
    	}
    	public function autoload($path,$options=null){ 
     
    		$pathTab=explode('::',$path);
    		$class  = $pathTab[0] ;
    		$method =isset($pathTab[1]) ? $pathTab[1] : null; 
    		$this->__call($class); 
     
    		try{
    			if(!null == $class && !null == $method && class_exists($class) && method_exists($class,$method)){
    				$class = new $class;
    				$class->$method($options);
    			}else{
    				throw new Exception("Class $class or method $method no found , call file path : $path ");
    			}		
    		}
    		catch (Exception $e) {
    			self::messageErreur($e); 
    		}
     	}
     
    	private static function getPath($path){ 
    		return str_replace('_','/',$path);
    	}
     
    	public static function messageErreur($msg = ''){
    		self::$_erreurs[] = $msg ;
    		if (!defined('SHOW_MESSAGE_ERREUR') || SHOW_MESSAGE_ERREUR == 'SHOW_MESSAGE_ERREUR' || SHOW_MESSAGE_ERREUR === true ){
    			try { 
    			throw new Exception($msg);
    			}
    			catch (Exception $e) {
    			echo "Message : ",  $e->getMessage(), "\n\r<br/><br/>";
    			}
    		}
    	}
     
    }
     
     
    /*
      par exemple créer un repertoire dans /library/class/View/View.php
    
    
    Class View{
    	
    	public function accueil($string){
    		echo $string;
    	}
    }
    */
     
    define('__DIR__' , dirname(__FILE__));
     
    $loader = new Loader; 
     
    $loader->register('library',__DIR__.'/library/class/'     ,'php');  
    $loader->register('public' ,__DIR__.'/public/'      ,'php'); 
    $loader->register('route' ,__DIR__.'/'      ,'php');
     
    print_r(Loader:: directory());
    echo "<br/><br/>";
    $loader->register('public',__DIR__.'/library/'     ,'php');
     
    $loader->autoload('View::accueil',"c'est un test");
    $loader->autoload('View::test',"c'est un test");
     
     
    $view = new View; 	
     
     
    ?>
    Conception / Dev

  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 : 47
    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,

    ta fonction autoload() est très étrange !
    L'autoloader doit juste gérer le mécanisme te permettant de trouver parmi tes répertoires le fichier content le code de la classe appelée et rien de plus.
    En gros, il ne doit se limiter qu'à ne faire au final qu'un simple include ''; et renvoyer true ou false. Chez toi, il instancie la classe et exécute une méthode en lui passant des options !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $class = new $class;
    $class->$method($options);
    T'es sûr de ton approche parce que là, il me semble que ton Loader fait bien trop de choses.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    Alors, pour le coup je peux te répondre ;

    j'ai prévu la function register pour alimenter la liste des chemins, et la fonction autoload pour carément taper dans le pratique, pour gagner du temps, accessible , mais je ne suis pas si sur de mes appellations, ni du découpage...


    a relire, il faut que je renomme la fonction autoload;


    merci a toi, et au personnes qui me permettrons d'affiner mon script.
    Conception / Dev

  4. #4
    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 : 47
    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
    Citation Envoyé par ascito Voir le message
    j'ai prévu la function register pour alimenter la liste des chemins
    Jusque là pas de problème,
    Citation Envoyé par ascito Voir le message
    et la fonction autoload pour carément taper dans le pratique, pour gagner du temps, accessible
    J'ai pas tout compris.
    Pourrais-tu expliquer le but de cette classe, stp.

Discussions similaires

  1. Erreur Class Loader
    Par yannick1717 dans le forum Weblogic
    Réponses: 2
    Dernier message: 23/01/2008, 15h22
  2. class loader getResourceAsStream
    Par *alexandre* dans le forum Langage
    Réponses: 18
    Dernier message: 13/11/2007, 13h08
  3. [POO] Classe d'abstraction simple
    Par sami_c dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/11/2007, 14h04
  4. [Class Loader] changer le class loader par défaut
    Par Didier 69 dans le forum Langage
    Réponses: 1
    Dernier message: 17/10/2006, 14h02
  5. [POO] Classe PHP super simple Mais j'y arrive pas
    Par mulbek dans le forum Langage
    Réponses: 10
    Dernier message: 17/03/2006, 15h33

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