2

我想继承 PDOStatement 类并在我的网站脚本中使用它。

但我很沮丧如何获得所需的对象。PDO::query 仅返回直接 PDOStatement 对象,看起来没有其他方法可以创建 PDOStatement 对象或继承的类。

最初我想将 PDOStatement 对象移动到继承类的构造函数中是这样的:

$stmt = PDO -> query("select * from messages");
$messageCollection = new Messaging_Collection($stmt);

但是如何使 PDOStatement 的实例成为继承对象(Messaging_Collection)。对我来说这是一个很大的问题。

class Messaging_Collection extends PDOStatement
{
public function __construct(PDOStatement $stmt)
{
//there i should to transform $stmt to $this
// direct $this = $stmt is not possible
// is there other right way?
}
4

1 回答 1

2

完成你想要做的最简单的方法实际上是这样的:

class Messaging extends PDO {
    function __construct($dsn="", $username="", $password="", $driver_options=array()) 
    {       
        parent::__construct("mysql:host=" . self::$host_name . ";dbname=" .self::$db_name, self::$username, self::$password, self::$driver_options);
        $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('Messaging_Collection', array($this)));
    }
}

基本上,您可以使用 setAttribute() 方法覆盖自定义 PDO 类要使用的默认语句类。

于 2010-06-14T01:39:59.837 回答