2015-01-28 6 views
0

У меня есть класс, который расширяет PDO:PHP Новый класс продлить экземпляр класса

class MyPDO extends PDO { 

} 

который имеет некоторые вспомогательные методы, такие как insert() и update(). Однако при использовании в дополнение к структуре я обычно имел бы доступ к уже инициализированному экземпляру PDO.

Как создать экземпляр MyPDO, чтобы он расширил уже существующий экземпляр PDO вместо создания нового?

$pdo; # An already existing PDO connection. 

$myPdo = new MyPDO(); # Creates a new PDO object 

# I want to create a new MyPDO which extends $pdo 

$myPdo = new MyPDO() + $pdo; # How would I accomplish this? Reflection? 

В основном я не хочу иметь более одного соединения PDO, но хочу иметь дополнительную функциональность MyPDO. Это можно сделать? Может быть, с отражением?

решение
+3

[Состав по наследству ] (http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance). Я никогда не был поклонником расширения основных драйверов базы данных для создания слоев абстракции базы данных. – Mark

ответ

0

Простейшее должен пройти $ PDO в классе

<?php 

    class MyPDO { 
     public $pdo; 
     public function __construct($pdo) { 
      $this->pdo = $pdo; 
     } 

     // your Methods use in the class $this->pdo->foo 
    } 
    $myPdo = new MyPDO($pdo); 

Другой путь ... вы простирается прямой mypdo на PDO и построить экземпляр $ PDO из mypdo

class MyPDO extends PDO { 
    public function __construct() { 
     parent::__construct(); 
    } 
    #Your additional methodes 
} 
$pdo = new MyPDO(); 
+0

В первом примере MyPDO не будет экземпляром PDO, и мне нужно будет создать метод __call для проксирования всех вызовов методов в свойство pdo. Второй пример не сможет использовать существующий экземпляр PDO. – Ozzy

Смежные вопросы