2010-11-17 4 views
0

Je suis un peu nouveau à PHP5/OOP et ne peux pas vraiment comprendre comment le code suivant fonctionne. Trouvé sur la documentation PHP.net lors de la recherche de la fonction __autoload() -.PHP OOP: Comment fonctionne ce code?

Comment dois-je appeler cela? new MyClass1(); Ou autoloader::model('myModel');?

The snippet:

class autoloader { 

    public static $loader; 

    public static function init() 
    { 
     if (self::$loader == NULL) 
     self::$loader = new self(); 

     return self::$loader; 
    } 

    public function __construct() 
    { 
     spl_autoload_register(array($this,'model')); 
     spl_autoload_register(array($this,'helper')); 
     spl_autoload_register(array($this,'controller')); 
     spl_autoload_register(array($this,'library')); 
    } 

    public function library($class) 
    { 
     set_include_path(get_include_path().PATH_SEPARATOR.'/lib/'); 
     spl_autoload_extensions('.library.php'); 
     spl_autoload($class); 
    } 

    public function controller($class) 
    { 
     $class = preg_replace('/_controller$/ui','',$class); 

     set_include_path(get_include_path().PATH_SEPARATOR.'/controller/'); 
     spl_autoload_extensions('.controller.php'); 
     spl_autoload($class); 
    } 

    public function model($class) 
    { 
     $class = preg_replace('/_model$/ui','',$class); 

     set_include_path(dirname(__FILE__) . PATH_SEPARATOR.'/model/'); 
     spl_autoload_extensions('.model.php'); 
     spl_autoload($class); 
    } 

    public function helper($class) 
    { 
     $class = preg_replace('/_helper$/ui','',$class); 

     set_include_path(get_include_path().PATH_SEPARATOR.'/helper/'); 
     spl_autoload_extensions('.helper.php'); 
     spl_autoload($class); 
    } 

} 

Répondre

1
$autoloader = autoloader::init(); 

Cela vous donnera l'instance de chargeur automatique. Cette classe veut être un singleton.

Tout __autoloader est une tentative de dernière minute par php pour trouver une classe qui n'a pas encore été incluse. Si vous avez une bonne structure de noms/répertoires, vous n'aurez pas besoin de vous soucier d'inclure/de requérir vos propres classes ... l'autochargeur le fera pour vous.

si vous vouliez appeler la fonction modèle:

$autoloader->model('Model'); 

Ce serait fait après avoir appelé la fonction d'initialisation statique() d'en haut.