我正在尝试在我正在开发的基于PHP的产品中实现插件API。我创建了一个继承自PHP的PDO类的类,然后添加了一些额外的方法。麻烦的是,我想在插件API中拦截像PDO的.query(),. exec(),. execute()和.fetchAll()之类的东西,处理传递给这些方法的参数。我尝试使用__call($ method,$ args)拦截器技术,但在这种情况下它不起作用,因为我无法将PDO方法标记为受保护。
如何创建一个继承自PDO的类,然后在将PDO类方法发送到父类之前拦截它们?目标是拦截传递给/来自这些方法的参数我的插件API将起作用。这是我在我正在处理的产品的插件API中没有的缺失部分。
答案 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....
}