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. ![Smilie](https://www.php-resource.de/forum/core/images/smilies/smile.gif)
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();
}
}
![Smilie](https://www.php-resource.de/forum/core/images/smilies/smile.gif)
Gruß
carapau
Kommentar