Intereting Posts
Скопируйте файл из плагина в каталог темы Добавить категорию в пользовательский URL-адрес Не удалось загрузить файлы скриптов в wordpress! я не могу понять, что я делаю неправильно Как автоматически добавлять и показывать (открывать) все атрибуты продукта? Поле пароля (и подтверждение), отображающееся дважды при регистрации ошибки проверки сайта WordPress get_term_link () возвращает неверный URL-адрес Как добавить содержимое страницы на другую страницу using comments_template () в пользовательском single-portfolio.php Включая категории в результаты поиска Как удалить облако тегов из страницы администрирования администрирования taxonomy? Добавить местоположение местоположения с радиусом мили, позволяющим искать Получение ошибки php_network_getaddress: такой хост не известен? Использует% postname% для постоянных ссылок, что действительно плохо для производительности? Как добавить сообщения на страницу

wp_loaded со статическим синглтоном

На моем сайте WordPress я создал Singleton внутри настраиваемого плагина, например:

 class VBWpdb { private $trace = array(); public static function get_instance() { static $instance = null; if(null === $instance) { $instance = new static(); } return $instance; } //... 

Итак, я использую VBWpdb::get_instance() во многих местах моего кода для заполнения массива $trace (первый var класса). Он работает с целью иметь след вдоль моего кода, и этот статический класс является единственным экземпляром во время выполнения плагина. Я тестировал с произвольными параметрами var_dump

Проблема в том, что … Я хочу напечатать эту трассу после загрузки моей страницы, и я это делаю:

 add_action('wp_loaded', 'vb_dump_wpdb_trace'); function vb_dump_wpdb_trace() { VBWpdb::get_instance()->dump(); } 

Кажется, что этот экземпляр не создается снова, но $trace имеет NULL .

Я пропустил что-то, связанное с проживанием объекта на слоях WordPress?

Solutions Collecting From Web of "wp_loaded со статическим синглтоном"

Вы просто делаете это неправильно. Проблема начинается с использования синглета, просто никогда этого не делайте.

У вас есть класс журналов, которые входят в некоторый внутренний буфер. Все регистраторы регистрируются в одном буфере, поэтому буфер ( trace в вашем случае) представляет собой статический массив в классе. Не более get_intance , просто get_intance новый журнал и журнал. Это дает вам дополнительную гибкость при наличии нескольких классов журналов, которые «выводят» в один и тот же буфер.

У нас остается вопрос, как проверить журнал, и это вы делаете со статическим методом.

Я уверен, что эта схема может быть улучшена людьми с более жестким ООП, чем я, использование singleton эквивалентно использованию namespace а код, написанный под пространством имен, легче читать и использовать, чем синглтон, просто вызвать функцию напрямую без необходимо сначала обработать проблемы с получением объекта, проще использовать функцию в крючке и т. д.

Ваша функция get_instance никогда не создаст экземпляр класса из-за этой строки:

 $instance = new static(); 

должен быть:

 $instance = new VBWpdb();