2012-02-08 9 views
3

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

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

ответ

4

Вместо наследования 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.... 
} 
+0

Это то, что я в конечном итоге делает. Мне также приходилось делать причудливые вещи, потому что PDO создает объект утверждения с помощью методов класса против этого. Таким образом, мне пришлось создать класс PDOStatementStub, который также делает что-то подобное выше. Затем я использовал __call() для перехвата и запуска этого с помощью методов класса private handle. – Volomike

Смежные вопросы