Где-нибудь есть документация, объясняющая, каков жизненный цикл плагинов?
Я запускаю новый плагин со стилем ООП, и я только что узнал, что мой основной класс часто создается (благодаря Xdebug и Netbeans).
Я удивляюсь, почему, и это раздражает меня, потому что я создаю экземпляр объекта Dropbox-API, и я действительно не думал, что WordPress просто так будет создавать мой основной класс.
Я не нашел ничего связанного с жизненным циклом плагинов ни в Кодексе, ни в Google.
plugin-development
codex
RitonLaJoie
источник
источник
Ответы:
Что для вас значит «стиль ООП»? Обернуть все ваши функции оператором класса? Тогда вы делаете это неправильно. Вы пропускаете класс как пространство имен.
А?
Попробуйте и посчитайте количество созданных файлов. Если я попробую, то для каждого запроса страницы будет создан один файл. Это означает, что только один экземпляр класса Foo для каждого запроса страницы.
Давайте попробуем призыв к действию
Если я загляну в мой каталог wp-content, я найду два файла. Больше не надо. Один файл создается при создании экземпляра класса. И один создается, когда вызов действия сделан.
Хорошо, давайте сделаем некоторые глупости с нашим экземпляром. Удалите
add_action( 'plugins_loaded', .. )
и добавьте этот код:Сколько файлов вы ожидаете? Я ожидаю два. Один из конструктора, один из метода.
Новый экземпляр создается только при использовании
new
оператора.Сейчас я считаю четыре файла. Два из конструктора и два из метода. Это потому, что WordPress сначала включает плагин, а затем выполняет действие
plugins_loaded
.Рекомендуется использовать ловушку действия
plugins_loaded
вместо создания экземпляра из функции, потому что, если файл плагина включен где-либо (например, в другом файле вашего плагина), новый экземпляр класса создается каждый раз, когда файл включается. Хук действияplugins_loaded
выполняется только один раз для каждого запроса страницы.источник
Может случиться так, что вы передадите копию своего класса фильтру или действию. Например, если вы хотите напрямую изменить переменные класса внутри ловушки или фильтра, вы также должны передать ловушку по ссылке
вместо того
Как уже упоминалось в bainternet, вы также можете использовать одноэлементный шаблон, чтобы убедиться, что конкретный объект создается только один раз (дальнейшие вызовы возвращают ссылку на этот объект).
Вы также можете подумать о том, чтобы сделать некоторые функции статичными (назначив им ключевое слово static. Обычно это делается для функций типа «помощник», которые не взаимодействуют с остальной частью класса. Статические методы можно вызывать без создания экземпляра класса.
Вы также можете передать статические функции в действие / фильтр:
Я также проверил http://codex.wordpress.org/Plugin_API/Action_Reference и обнаружил, что плагины могут быть загружены только в два этапа запроса (muplugins_loaded и plugins_loaded).
источник