Intereting Posts
Класс Logger не найден в LoggerRoot.php Сеанс Codeigniter не отменяется задания cron или планировщик PHP Экспортировать html в PDF в PHP? Получить URL-адрес корня для веб-сайта PHP проблема с извлечением записей базы данных в codeigniter Приложение C # должно отправлять некоторые данные на веб-сайт php, но должно уважать политику аутентификации Горячая клавиша в PhpStorm для перехода к тегу HTML end Невозможно вставить путь для нескольких изображений в таблице базы данных с помощью codeigniter Symfony2 fos логин, зарегистрируйтесь и забыли пароль в одном представлении Добавить миниатюру продукта в мой аккаунт – Последние заказы – Woocommerce PHP MVC: слишком много зависимостей в контроллере? Использовать регулярные выражения для проверки паролей PHP preg_match с рабочим регулярным выражением Выполнение всех выходных файлов PHP проходит через «файл фильтра» перед отображением

Как эта функция автозагрузки?

Вот мой класс автозагрузчика. Я изучаю 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. 🙂