Intereting Posts
Сопоставление доменов для перенаправления WordPress MU и https – Как это сделать? Добавление поля пользовательского идентификатора в категории Стратегия построения плагина с использованием Eclipse Максимальная длина meta_value Загрузите несколько изображений в продукт Woocomerce wp локализующий скрипт не работает создать окно комментариев в магазине магазина woo-commerce Как сортировать таблицу пользовательских сообщений по столбцу, содержащему настраиваемое поле Невозможно получить постсовый контент из настраиваемого цикла post post Вызов функции в обработчике коротких кодов WordPress Почему пользовательский шаблон не рассматривается как страница с is_page ()? Как показать атрибуты продуктов в цикле? Демпинговая переменная в пользовательской функции pre_gets_post в functions.php возвращает NULL Удаленный файл загрузки на сервер B Когда следует использовать add_action при регистрации / вставка сценариев

Являются ли крючки синхронно?

Я не был уверен, как спросить об этом. В WP, когда программа запускается, все ли это «последовательный»? Под этим я подразумеваю, что WP ударил ваш крюк, который вы зарегистрировали, и назовите его, подождите, а затем продолжите, синхронно? Там нет инъекции зависимостей IoC, которые я мог бы найти, и без асинхронизации.

Я посмотрел на ядро, и я не мог сказать. Я видел ссылки на несколько глобальных переменных и массив перехваченных перехватов, но я не понял выполнение. Я пытался с xdebug, но я еще не понял.

Solutions Collecting From Web of "Являются ли крючки синхронно?"

do_action() и apply_filters() являются обертками

 WP_Hook::apply_filters() 

метод, который вызывает зарегистрированные обратные вызовы в последовательном порядке ( src ).

Вот простой тест:

Определим оболочку обратного вызова:

 $callback_gen = function( $seconds ) { return function() use ( $seconds ) { sleep( $seconds ); printf( '%s finished' . PHP_EOL, $seconds ); }; }; 

Затем мы регистрируем обратные вызовы для действия mytest :

 add_action( 'mytest', $callback_gen( 3 ) ); add_action( 'mytest', $callback_gen( 5 ) ); add_action( 'mytest', $callback_gen( 1 ) ); 

Затем мы вызываем обратные вызовы и измеряем время, которое требуется:

 $start = microtime( true ); do_action( 'mytest' ); $stop = microtime( true ); 

и отобразите его с помощью:

 echo number_format( $stop - $start, 5 ); 

Здесь выходы из 5 тестовых прогонов:

 3 finished 5 finished 1 finished 9.00087 3 finished 5 finished 1 finished 9.00076 3 finished 5 finished 1 finished 9.00101 3 finished 5 finished 1 finished 9.00072 3 finished 5 finished 1 finished 9.00080 

где порядок одинаков для каждого прогона, всего около 9 секунд, как и ожидалось для последовательного заказа.

Да, это все линейно / последовательно . В PHP-приложении нет многопоточного или параллельного выполнения. Захваты WordPress выполняются последовательно .

Когда вы подключаетесь к действию или фильтру, ваш код просто добавляет callable объект в массив где-нибудь. Когда действие срабатывает, WordPress перебирает эти callables и вызывает их. В качестве побочного действия действия и фильтры используют одну и ту же систему и технически одинаковы.

Имеет смысл думать или действовать и перехватывать события вручную в линейной временной шкале, а не обратные вызовы от процесса в другом потоке,

Основываясь на том, как все работает в «Узел», вы можете поверить, что вы можете использовать крючки для удержания длинных задач или дорогостоящей работы в другой поток. Это не так, и запуск бесконечного цикла в крючке приведет к таймауту процесса. Процессы PHP выполняются singlethreaded и не являются потокобезопасными, вы можете создавать дополнительные процессы, но это полностью для вас, чтобы управлять ими и иметь свои собственные проблемы.