PDO Wrapper возвращает NULL - PullRequest
       8

PDO Wrapper возвращает NULL

0 голосов
/ 05 октября 2011

У меня есть следующий набор инициализации PDO в моем конструкторе для оболочки PDO:

public function __construct($engine, $host, $username, $password, $dbName)
{
    $this->host = $host;
    $this->dsn = $engine.':dbname='.$dbName.';host='.$host;
    $this->dbh = parent::__construct($this->dsn, $username, $password);
    $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);      
}

Моя основная проблема заключается в том, что когда я устанавливаю dbh для инициализации в качестве родителя в конструкторе, он возвращает NULL,

и это создает цепную реакцию.

Есть что-то конкретное, что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

Вы смешиваете обертку класса и наследуете класс.

Либо делаете это (обертывание):

class YourDB
{
    public function __construct($engine, $host, $username, $password, $dbName)
    {
        $this->host = $host;
        $this->dsn = $engine.':dbname='.$dbName.';host='.$host;
        // here we are wrapping a PDO instance;
        $this->dbh = new PDO($this->dsn, $username, $password);
        $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);      
    }

    // possibly create proxy methods to the wrapped PDO object methods

}

Или (наследуете):

class YourDB
    extends PDO // extending PDO, and thus inheriting from it
{
    public function __construct($engine, $host, $username, $password, $dbName)
    {
        $this->host = $host;
        $this->dsn = $engine.':dbname='.$dbName.';host='.$host;
        // here we are calling the constructor of our inherited class
        parent::_construct($this->dsn, $username, $password);
        $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);      
    }

    // possibly override inherited PDO methods

}
2 голосов
/ 05 октября 2011

Вы не понимаете вызов parent::__construct().

Звонок parent::__construct() ничего не возвращает:

<?php

class Obj {

   public  $deja;

   public function __construct() {
      $this->deja = "Constructed";
   }

}

$obj = new Obj();


class eObj extends Obj {


   public $parent;

   public function __construct() {
      $this->parent = parent::__construct();
   }

}

$eObj = new eObj();

if($eObj->parent==null) {
    echo "I'm null";
    echo $eObj->deja; // outputs Constructed
}

?>

Вызов parent::__construct() просто вызывает родительский конструктор вашего объекта. Будут установлены любые переменные, определенные в родительском элементе и т. Д. Он ничего не возвращает.

...