PHP: Как привести объект к унаследованному классу? - PullRequest
2 голосов
/ 14 июня 2010

Я бы хотел унаследовать класс 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?
}

1 Ответ

2 голосов
/ 14 июня 2010

Самый простой способ выполнить то, что вы пытаетесь сделать, это на самом деле что-то вроде этого:

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.

...