我如何拦截PDO呼叫?

时间:2012-02-08 08:28:55

标签: php oop inheritance pdo overloading

我正在尝试在我正在开发的基于PHP的产品中实现插件API。我创建了一个继承自PHP的PDO类的类,然后添加了一些额外的方法。麻烦的是,我想在插件API中拦截像PDO的.query(),. exec(),. execute()和.fetchAll()之类的东西,处理传递给这些方法的参数。我尝试使用__call($ method,$ args)拦截器技术,但在这种情况下它不起作用,因为我无法将PDO方法标记为受保护。

如何创建一个继承自PDO的类,然后在将PDO类方法发送到父类之前拦截它们?目标是拦截传递给/来自这些方法的参数我的插件API将起作用。这是我在我正在处理的产品的插件API中没有的缺失部分。

1 个答案:

答案 0 :(得分: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....
}