Я работаю над проектом, который включает в себя профилирование потока выполнения. Я создал отдельный класс для профилировщика, и каждый раз, когда мне нужно профилировать что-то, я создаю объект класса профилировщика и начинаю мониторинг.Циклическая зависимость между классами PHP
$profiler=new Profiler($params);
$profiler->start();
//the code to be monitored//
$profiler->end();
Конструктор класса профилировщика проверяет параметры, чтобы определить, зарегистрирован ли идентификатор экземпляра или нет. Я использовал таблицу базы данных для хранения параметров профилирования.
void _construct($params){
$this->checkConfig($params);
}
Функция checkConfig выполняет запрос в базе данных, чтобы получить конфигурацию.
Теперь, когда команда планирует отслеживать запросы к базе данных (которые выполняются с помощью класса запросов в нашем случае). Я попробовал аналогичную реализацию для функции executeQuery:
class Query{
public function executeQuery($queryParams){
$profiler=new Profiler($params);
$profiler->start();
/*Execute query*/
$profiler->end();
}
}
Это создает интересную круговую зависимость. Класс запроса запускает профилировщик, который запускает запрос, и запрос снова запрашивает профайлер.
Любые идеи исправить это?
Внедрить класс 'Query' в профилировщик? В любом случае у вас есть ошибки в вашем коде: метод 'executeQuery' передает несуществующую переменную' $ params' в конструктор 'Profiler' –
У меня была такая же проблема, когда я реализовал прослушиватели для своего класса DB. Когда я реализовал и зарегистрировал слушателя с запросами БД, слушатель снова вызвался в слушателе, поэтому я оказался в бесконечном цикле. То, что я тогда реализовал в классе DB, является функцией 'muteListener()', которая при установке 'true' прекращает прослушивание прослушивателей. Итак, в моем слушателе до того, как я произвел запрос БД, я установил 'muteListener (true)' и после запроса? false "снова. – TiMESPLiNTER
@EliasVanOotegem params var предназначен только для демонстрационной цели. Функция executequery передаст некоторую реальную информацию, чтобы узнать, должен ли быть профилирован текущий запрос. – nullPointer