Hallo zusammen,
ich stehe ein bisschen auf dem Schlauch und suche einen Weg möglichst performant meine Klassen zu schreiben. Momentan erzeuge ich zu viele Datenbank-Objekte ohne sie sauber wiederverwenden zu können. Hier meine Ansätze:
Unten seht ihr die zwei Möglichkeiten, die ich momentan verwende. Bei Möglichkeit 1 muss jedes Mal das DB-Objekt übergeben werden (soll aber in der Klasse passieren!), bei Möglichkeit 2 wird jedes Mal eine Verbindung hergestellt, auch wenn man sie nicht braucht. Lösung drei baut bei jedem erzeugten Objekte eine Verbindung auf - das werden ganz schnell 5-10 Verbindungen (User, News, News-Kategorien, ...).
Möglichkeit 1
Möglichkeit 2
Möglichkeit 3
Ich möchte gerne innerhalb der Klasse "News" entscheiden, ob die Datensätze aus der DB oder dem Cache geholt werden sollen, jedoch das gleiche DB-Objekt verwenden. In etwa so:
Ich finde einfach keine ordentliche Lösung. Wie macht ihr das? Bitte nicht nur auf Frameworks verweisen, danke. 
Gruß
carapau
ich stehe ein bisschen auf dem Schlauch und suche einen Weg möglichst performant meine Klassen zu schreiben. Momentan erzeuge ich zu viele Datenbank-Objekte ohne sie sauber wiederverwenden zu können. Hier meine Ansätze:
Unten seht ihr die zwei Möglichkeiten, die ich momentan verwende. Bei Möglichkeit 1 muss jedes Mal das DB-Objekt übergeben werden (soll aber in der Klasse passieren!), bei Möglichkeit 2 wird jedes Mal eine Verbindung hergestellt, auch wenn man sie nicht braucht. Lösung drei baut bei jedem erzeugten Objekte eine Verbindung auf - das werden ganz schnell 5-10 Verbindungen (User, News, News-Kategorien, ...).
Möglichkeit 1
PHP-Code:
$DB = new DB; // Verbindung wird im Konstruktor hergestellt
$News = new News($DB); // DB Objekt wird übergeben und kann nun in News verwendet werden.
PHP-Code:
// index.php
$DB = new DB;
// news.php
$News = new News;
// News.class.php
public function __construct() {
global $DB;
// ...
}
PHP-Code:
public function __construct() {
$DB = new DB; // Verbindung herstellen
}
PHP-Code:
// News.class.php
public function __construct() {
$DB = new DB; // auch blöd
$this->db = $DB;
}
public function getNews($news_id) {
if (newsImCache($news_id) {
return $cachedNews;
} else {
$this->db->connect(); // wenn Verbindung besteht, nicht neu verbinden!
$this->db->query("SELECT ...");
return $this->db->fetch();
}
}

Gruß
carapau
Kommentar