Как перехватить вызовы PDO? - PullRequest
3 голосов
/ 08 февраля 2012

Я пытаюсь реализовать плагин API в продукте на основе PHP, над которым я работаю.Я создал класс, который наследуется от PHP-класса PDO, а затем добавил несколько дополнительных методов.Проблема в том, что я хочу перехватывать такие вещи, как PDU .query (), .exec (), .execute () и .fetchAll () в API плагинов, обрабатывая аргументы, передаваемые в / из этих методов.Я попытался использовать технику перехватчика __call ($ method, $ args), но в этом случае это не сработает, потому что у меня нет способа пометить методы PDO как защищенные.

Как мне сделатькласс, который наследует от PDO, а затем перехватывает методы класса PDO, прежде чем они будут отправлены родительскому классу? Цель состоит в том, чтобы перехватывать аргументы, передаваемые в / из этих методов, чтобы мой API плагина работал.Это недостающий элемент, которого нет в API моего плагина для продукта, над которым я работаю.

1 Ответ

4 голосов
/ 08 февраля 2012

Вместо того, чтобы наследовать PDO, просто оберните его.

Просто пример:

class MyDB {
    private $dbh;

    public function __construct($dsn, $username, $password, $driver_options = array()) {
       $this->dbh = new PDO($dsn, $username, $password, $driver_options);
    }

    public function query($statement) {
        //do something you want
        //...
        return $this->dbh->query($statement);
    }

    //and so on....
}
...