Servus.
Ich hab mal wieder ein Verständnis-Problem. Ich habe eine Datenbank-Klasse geschrieben, die in mehreren anderen Klassen verfügbar sein muss. Die Frage ist, wie ich das realisiere. Meine bisherigen Überlegungen:
(a) Singleton
Davon möchte ich nichts wissen, da dies immer wieder zu Konflikten führt und in mancher Münder als nicht der OOP entsprechend schallt!
(b) Je Klasse eine neue Instanz der DB-Klasse erzeugen
Es ist föllig unnötig in jeder Klasse, die auf Methoden der DB-Klasse Zugriff benötigt, eine neue Instanz zu erstellen; Stichwort Resourcenschonung.
(c) Vererbung mittels extends
Ich habe ein Problem damit, die Methoden zu vererben. Warum?
Extends bezeichnet eine 'ist-eine' Beziehung und das ist allein schon semantisch falsch:
User ist eine Datenbank.
(d) Parameterübergabe
Eine weitere Möglichkeit ist durch das Übergeben der DB-Instanz an die jeweilige Klasse gegeben.
Macht aber ich meinen Augen wenig Sinn, jeder Klasse, die eine DB-Methode benötigt, den Parameter noch zu übergeben.
Ich mein, ich werde ja wohl nciht der einzige sein, der vor einem solchen Problem steht oder stand. Was kann man da denn machen, oder wonach kann ich noch suchen?
Edit
Ich habe gerade erfahren, dass es durchaus sinnvoll ist, die hier erwähnte DB-Klasse in den jeweiligen Klassen, die die Methoden dieser benötigen, zu implementieren.
Durch den Destructor der DB-Klasse wird nicht nur die DB-Verbindung getrennt, sondern auch der Speicherplatz im RAM wieder freigegeben.
Ich hab mal wieder ein Verständnis-Problem. Ich habe eine Datenbank-Klasse geschrieben, die in mehreren anderen Klassen verfügbar sein muss. Die Frage ist, wie ich das realisiere. Meine bisherigen Überlegungen:
(a) Singleton
Davon möchte ich nichts wissen, da dies immer wieder zu Konflikten führt und in mancher Münder als nicht der OOP entsprechend schallt!
(b) Je Klasse eine neue Instanz der DB-Klasse erzeugen
Es ist föllig unnötig in jeder Klasse, die auf Methoden der DB-Klasse Zugriff benötigt, eine neue Instanz zu erstellen; Stichwort Resourcenschonung.
(c) Vererbung mittels extends
Ich habe ein Problem damit, die Methoden zu vererben. Warum?
PHP Code:
class User extends Database
{
/* [...] */
}
User ist eine Datenbank.
(d) Parameterübergabe
Eine weitere Möglichkeit ist durch das Übergeben der DB-Instanz an die jeweilige Klasse gegeben.
PHP Code:
class Database
{
/* [...] */
}
class User
{
private $_db = null
public function __construct($db)
{
if (is_resource($db)) {
$this->_db = $db;
}
}
}
$Database = new Database();
$User = new User($Database);
Ich mein, ich werde ja wohl nciht der einzige sein, der vor einem solchen Problem steht oder stand. Was kann man da denn machen, oder wonach kann ich noch suchen?
Edit
Ich habe gerade erfahren, dass es durchaus sinnvoll ist, die hier erwähnte DB-Klasse in den jeweiligen Klassen, die die Methoden dieser benötigen, zu implementieren.
PHP Code:
class Database
{
private $_connection = null;
/* [...] */
public function __destruct()
{
if (is_resource($this->_connection)) {
mysql_close($this->_connection);
}
}
/* [...] */
public function MethodFromDatabaseCalss()
{
/* [...] */
}
/* [...] */
}
class User
{
private $_database;
/* [...] */
public function __construct()
{
$this->_database = new $Database();
}
/* [...] */
public function GetSomethingUserSpecifiedFromDatabase()
{
return $this->_database->MethodFromDatabaseCalss();
}
/* [...] */
}
Originally posted by php.net