php - 如何拦截 PDO 调用?

标签 php oop inheritance pdo overloading

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

我如何创建一个继承自 PDO 的类,然后在它们被发送到父类之前拦截 PDO 类方法?目标是拦截传递给/来自这些方法的参数,以便我的插件 API 可以工作。这是我正在开发的产品的插件 API 中缺少的部分。

最佳答案

不是继承 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....
}

关于php - 如何拦截 PDO 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9189855/

相关文章:

objective-c - 在抽象 Objective-C 类中使用常量?

php - Symfony Profiler 的日志数据

PHP锐度卷积矩阵

php - Eclipse PDT + 代码完成根本不起作用

php - Facebook 连接很慢,我可以使用 AJAX 吗?

c++ - 如何仅通过调用基类的相同方法来调用继承类的方法?

java - 我什么时候应该在类里面使用 "this"?

php - 在函数内部调用对象

html - 如何在 css 中设置特定段落元素的样式而不影响同一类中的其他段落?

c++ - 如何使用私有(private)继承的方法覆盖纯虚方法?