Announcement

Collapse
No announcement yet.

Datenbank-Methoden in anderen Klassen verfügbar machen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datenbank-Methoden in anderen Klassen verfügbar machen

    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?
    PHP Code:
    class User extends Database
    {
     
    /* [...] */

    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.
    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); 
    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.
    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();
        }
        
        
    /* [...] */

    Durch den Destructor der DB-Klasse wird nicht nur die DB-Verbindung getrennt, sondern auch der Speicherplatz im RAM wieder freigegeben.

    Originally posted by php.net
    [...]
    Die Destruktormethode wird aufgerufen, sobald alle Referenzen auf ein bestimmtes Objekt entfernt werden oder wenn das Objekt explizit zerstört wird
    [...]
    Zuletzt editiert von Antz; 12.09.2011, 22:09.
    Ants aren't dead
Working...
X