2

PDOStatement クラスを継承して、Web サイトのスクリプトで使用したいと考えています。

しかし、必要なオブジェクトを取得する方法に不満があります。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 に答える