我想继承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?
}
答案 0 :(得分: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类使用的默认语句类。