• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage zur Vererbung

Tronjer

Senior HTML'ler
Ich habe eine Elternklasse, die eine Verbindung zur Datenbank aufbaut und eine Kindklasse, welche damit CRUD-Operationen ausführt:

Elternklasse (gekürzt):
PHP:
class Connection
{
  protected function createConnection() {
   return new PDO("mysql:host={$this->host};dbname={$this->dbname}", $this->user, $this->password);
  }
}

Kindklasse (gekürzt):
PHP:
class Product_Table extends Connection
{
  /** CRUD-Methoden **/
  public function doSomething() {
    $db = $this->createConnection();
  }
}

Problem ist, dass ich $db = $this->createConnection() nicht einmalig als Klassen-Attribut speichern kann, sondern aus jeder Methode heraus neu aufrufen muss. Geht das nicht eleganter?
 
Zuletzt bearbeitet:
Ich habe eine Elternklasse, die eine Verbindung zur Datenbank aufbaut und eine Kindklasse, welche damit CRUD-Operationen ausführt:

Elternklasse (gekürzt):
PHP:
class Connection
{
  protected function createConnection() {
   return new PDO("mysql:host={$this->host};dbname={$this->dbname}", $this->user, $this->password);
  }
}

Kindklasse (gekürzt):
PHP:
class Product_Table extends Connection
{
  /** CRUD-Methoden **/
  public function doSomething() {
    $db = $this->createConnection();
  }
}

Problem ist, dass ich $db = $this->createConnection() nicht einmalig als Klassen-Attribut speichern kann, sondern aus jeder Methode heraus neu aufrufen muss. Geht das nicht eleganter?

Kannst du keine __construct Methode nehmen?

PHP:
class Connection
{
    private $db = null;
    public function __construct () {
        $this->db = new PDO(...);
    }
}

PHP:
class Product extends Connection
{
    public function foo () {
        $this->db->query();
    }
}
$prod = new Product();
$prod->foo();

Weiß nicht ob dir das hilft, da du dich ja eigentlich mit PHP auskennst :D

PS: Sieh dir vielleicht mal Doctrine2 an - ich finde das super; besser gesagt göttlich.
 
Zuletzt bearbeitet:
Hilft so leider noch nicht. Ich habe in der Klasse mindestens 4 Methoden, welche eine Datenbankverbindung benötigen: create(), read(), update() und delete() und will den Verbindungsaufbau nicht in jede Methode kopieren müssen.

Mit PHP arbeite ich nicht so häufig und wenn ich wie im vorliegenden Fall ohne Framework auskommen muss, welches Active Record Methoden mitliefert, tue ich mich schwer. Da fehlt die Übung.

Edit: Wobei du natürlich recht hast. An __construct habe ich nicht gedacht. Gleich mal probieren. :D
 
Zuletzt bearbeitet:
Zurück
Oben