Вот мой класс автозагрузчика. Я изучаю PHP с этой недели. У меня есть идея автозагрузчика из разных статей и PHP в книге действий, но я понятия не имею, как она на самом деле будет работать?
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, 'library')); spl_autoload_register(array(this, 'controller')); spl_autoload_register(array(this, 'helper')); spl_autoload_register(array($this, 'model')); } public function library($class) { set_include_path(get_include_path() . PATH_SEPARATOR . '/lib'); spl_autoload_extensions('.php'); spl_autoload($class); } public function controller($class) { set_include_path(get_include_path() . PATH_SEPARATOR . '/controller'); spl_autoload_extensions('.php'); spl_autoload($class); } public function helper($class) { set_include_path(get_include_path() . PATH_SEPARATOR . '/helper'); spl_autoload_extensions('.php'); spl_autoload($class); } public function model($class) { set_include_path(get_include_path() . PATH_SEPARATOR . '/model'); spl_autoload_extensions('.php'); spl_autoload($class); } }
Я хотел бы спросить, как точно работает этот автозагрузчик? например, если я инициализирую класс, который находится в папке с лоброй, как этот полный файл будет обработан?
Прежде всего, когда вы создаете экземпляр класса, функция-конструктор регистрирует четыре функции, которые будут обрабатывать автозагрузку класса.
$autoloader = new autoloader();
Каждый из них будет искать файлы в своем собственном конкретном каталоге. Нет необходимости вызывать функцию autoloader :: init (), так как все функции автозагрузки уже зарегистрированы путем создания экземпляра класса.
Затем, когда вы пытаетесь создать экземпляр класса, если PHP не сможет его найти, перед сбоем с ошибкой он будет запускать функции, зарегистрированные spl_autoload_register () в том порядке, в котором они были зарегистрированы. (autoloader :: library (), autoloader :: controller (), autoloader :: helper () и autoloader :: model ()), и, если после того, как этот класс будет доступен, он будет создан.
Расширяя ваш пример, вот фрагмент кода:
<?php include 'autoloader.php'; // in this file we have our autoloader class $autoloader = new autoloader(); $libClass = new someLib();
Когда мы вызываем new someLib (), механизм автозагрузки PHP будет искать файл «somelib.php» (! Lowercase!) Во всех областях, упомянутых в директиве include_path. Понимаете, каждая функция добавляет свое собственное местоположение в эту директиву
set_include_path(get_include_path() . PATH_SEPARATOR . '/controller');
Это означает, что папка с именем «controller», которая находится в вашем корневом каталоге, будет добавлена в include_path, а затем spl_autoload () будет искать в ней файл. Таким образом, вы должны создать файл /lib/somelib.php и иметь класс с именем 'someLib'
Надеюсь это поможет
Дополнительная информация: spl_autoload_register spl_autoload
@ user991047 В качестве новичка я советую вам прояснить концепцию концепций класса и ООП. если вы уже знаете, что игнорируете совет.
Класс, о котором вы упоминали, в основном используется в PHP MVC (Model View-helper Controller). framework – это набор классов на основе php для Model, Helper и Controller, которые помогают ускорить разработку приложений, безопасность, удобство использования кода и многое другое …
Для приложения, использующим фреймворк MVC Framework, необходимо установить путь к библиотеке этих классов, чтобы пользователь мог разработать собственный код, не беспокоясь о пути библиотеки MVC. И это цель этого класса
класс автозагрузчика, который вы упомянули, содержит метод
public static function init()
Этот метод – это состояния, которые вы можете вызвать этот метод напрямую, создавая экземпляр объекта класса автозагрузчика. Этот метод проверяет, создан ли объект автозагрузчика класса? а если нет, то он создает объект того же класса, через который могут быть доступны методы класса.
Конструктор автоматически вызывается, когда создается объект класса, и поэтому он регистрирует все четыре метода
public function library($class) public function controller($class) public function helper($class) public function model($class)
Эта функция помогает автоматически выполнять include_once () для всех классов MVC.
Если вы еще не поняли, что сначала должны быть понятны о шаблоне MVC. 🙂