我正在尝试在我正在开发的基于 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/