API для плагинов к встроенному драйверу MySQL
PHP Manual

API плагинов mysqlnd

API плагинов mysqlnd предоставляет следующие функции:

Нет стандартных определений того, что такое плагин и как он работает.

Часто встречающиеся в плагинах компоненты:

Концепция плагина mysqlnd эксплуатирует эту функциональность и, кроме того, радует нас открытой архитектурой.

Нет запретов

Плагин имеет полный доступ ко всем внутренностям mysqlnd. Нет ограничений или запретов, связанных с безопасностью. Все что угодно можно переписать для реализации дружественных или враждебных алгоритмов, так что рекомендуется ставить плагины только из доверенных источников.

Как обсуждалось выше, плагины могут свободно использовать указатели. Эти указатели ничем не ограничены и могут указывать на данные другого плагина. Простейшая арифметическая операция позволит получить доступ к данным другого плагина.

Рекомендуется писать сотрудничающие плагины, которые могут работать сообща с другими плагинами и всегда вызывать родительские методы. Плагины никогда не должны вести себя враждебно к самому mysqlnd.

Проблемы: пример сотрудничества и построения цепочки
Расширение Указатель mysqlnd.query() Стек вызова, если вызывается родитель
ext/mysqlnd mysqlnd.query() mysqlnd.query
ext/mysqlnd_cache mysqlnd_cache.query()
  1. mysqlnd_cache.query()

  2. mysqlnd.query

ext/mysqlnd_monitor mysqlnd_monitor.query()
  1. mysqlnd_monitor.query()

  2. mysqlnd_cache.query()

  3. mysqlnd.query

В этом сценарии загружены плагины кеша(ext/mysqlnd_cache) и мониторинга (ext/mysqlnd_monitor). Оба наследуют класс Connection::query(). регистрация плагинов происходит на этапе MINIT в соответствии с описанной выше логикой. PHP, по умолчанию, вызывает расширения в алфавитном порядке. Плагины не знают друг о друге и не накладывают каких либо зависимостей.

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

Резюме по расширению PHP

Повторение пройденного материала на примере поведения плагина ext/mysqlnd_plugin, использующего API плагинов mysqlnd для PHP:


API для плагинов к встроенному драйверу MySQL
PHP Manual