2016-08-05 4 views
0

Ich spiele mit Slim PHP-Framework herum und stolperte über eine Situation, die ich nicht erarbeiten kann.Injizieren von Objekten, die sich von einer Elternklasse in Slim erstreckt

Zuerst werde ich die grundlegende Einrichtung erklären:

slim-skeleton benutzen, habe ich eine dependencies.php Datei, wo die DIC eingerichtet ist. Es ist die Standard-slim-Skelett-Setup mit zwei Dinge:

$container['db'] = function ($c) { 
    return new PDO('mysql:host=localhost;dbname=****', '********', '********'); 
}; 

$container['model.user'] = function ($c) { 
    $db = $c['db']; 
    return new Dash\Models\User($db); 
}; 

So, wie Sie sehen können, habe ich zwei neue Dinge in der DIC registriert - Ein PDO Objekt und ein Benutzer Objekt.

Aber die Übergabe eines Datenbankobjekts für jedes andere Modell ist ein bisschen schmerzhaft ... Ich würde gerne in der Lage sein, das PDO-Objekt in eine Elternklasse namens Modell zu injizieren.

So sollte das Modell wie folgt aussehen:

class Model 
{ 
    protected $db; 

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

Und die User-Modell:

class User extends Model 
{ 
    public function getById($id) 
    { 
     $this->db->... // I have access to the database object (PDO) from the parent class. 
    } 
} 

Die Sache ist, dass ich nicht ein übergeordnetes Objekt haben kann, da der Behälter nehmen eine neue Instanz zurückgibt von Benutzer und nicht instanziiert die Eltern Modell Klasse.

Irgendwelche Ideen, wie Vererbung zu erreichen, mit Slim-Container auf eine saubere und nutzbare Weise?

Vielen Dank im Voraus.

+1

Das Instanziieren einer untergeordneten Klasse in Ihrem Fall erfordert immer noch den Konstruktor der Basisklasse. Die Vererbung funktioniert nicht so. Sie erweitern Klassen, nicht bereits erstellte Objekte. –

Antwort

1

So funktioniert Vererbung nicht. Userist eine Instanz von Model. Also, wenn Sie new User($c['db']) tun, wird es gut funktionieren.

+0

Ahm, nun, ich brauche eine Pause. Du hast vollkommen recht. Vielen Dank! – brslv

Verwandte Themen