Взгляните на Zend_Db_Profiler , так как он делает именно это. Вы можете получить некоторые идеи для своего собственного кода.
Если бы мне пришлось делать это самостоятельно, я бы, вероятно, написал бы Profiler Decorator для класса базы данных, который собирает статистику запросов для меня каждый раз, когда выполняется запрос.
Другой вариант - использовать класс DB и класс Profiler для Subject / Observer , где класс DB уведомляет профилировщик при каждом запуске запроса.
Или вы можете просто внедрить экземпляр Profiler в класс DB и делегировать коллекцию из класса DB профилировщику.
Однако я бы не решил бы коллекцию как таковую в классе DB со статическими свойствами, так как этот сбор статистики не имеет значения для класса.
Кроме того, я предлагаю вам отложить фактические вызовы подключения к базе данных, когда они необходимы. Не подключайтесь, когда вы впервые создаете экземпляр класса DB, но поместите этот код в метод connect. Затем, когда кто-то вызывает ваш метод запроса, проверьте, был ли вызван connect, а если нет, запустите connect (). Нет необходимости устанавливать соединение, если ничего не запрашивается.