PHP ООП: Как работает этот код? - PullRequest
0 голосов
/ 17 ноября 2010

Я новичок в PHP5 / OOP и не могу понять, как работает следующий код. Обнаружил его в документации по PHP.net при исследовании функции __autoload ().

Как мне это назвать? new MyClass1(); или autoloader::model('myModel');?

Фрагмент:

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);
    }

}

1 Ответ

1 голос
/ 17 ноября 2010
$autoloader = autoloader::init();

Это даст вам экземпляр автозагрузчика.Этот класс хочет быть одиночным.

Все __autoloader - это последняя попытка php найти класс, который еще не был включен.Если у вас хорошая структура имен / каталогов, вам не нужно беспокоиться о включении / требовании какого-либо из ваших собственных классов ... автозагрузчик сделает это за вас.

, если вы хотите вызвать функцию модели:

$autoloader->model('Model');

Это будет сделано после вызова статической функции init () сверху.

...