2010-06-14 14 views
2

Je voudrais hériter de la classe PDOStatement et l'utiliser dans mes scripts de site Web.PHP: Comment convertir un objet en classe héritée?

Mais je suis frustré de savoir comment obtenir l'objet requis. PDO :: query renvoie uniquement un objet PDOStatement direct et ressemble à l'absence d'une autre méthode pour créer un objet PDOStatement ou une classe héritée.

Initialement, je pensais à déplacer l'objet PDOStatement au constructeur de classe Hériter Quelque chose comme ça:

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

Mais comment faire par exemple de PDOStatement pour objet hérité (de Messaging_Collection). C'est une grande question pour moi.

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? 
} 

Répondre

2

La façon la plus simple d'accomplir ce que vous essayez de faire est en fait quelque chose comme ceci:

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))); 
    } 
} 

Fondamentalement, vous pouvez utiliser la méthode setAttribute() pour remplacer la classe de l'instruction par défaut pour être utilisé par votre classe PDO personnalisée.

+0

c'est vraiment ce que j'ai besoin de faire. Je connais une telle possibilité d'aller chercher des objets, mais c'était une nouvelle pour moi. Merci – andreyvlru

Questions connexes