[PHP] [OOP] MySQL in 2.Klasse benutzen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Nosferatu, 28. März 2009 .

Schlagworte:
  1. 28. März 2009
    [OOP] MySQL in 2.Klasse benutzen

    Ich bin gerade am überlegen welche Methode besser/Performanter ist.

    Wenn ich die MySQL Verbindung in der zweiten Klasse neu erstelle, Global:
    PHP:
    Class  MySql  () {...}
    Class 
    extends  () {
    private 
    db ;
    __construct  () {
          
    $this -> db  = new  MySql ();
    ...
    }
    }

    Oder die Verbindung manuel übergebe:
    PHP:
    Class  MySql  () {...}
    Class 
    extends  () {
    private 
    db ;
    __construct  dbconnection  ) {
          
    $this -> db  dbconnection ;
    ...
    }
    }

    Vielleicht kann sich hier ein Entwickler mit mehr OOP Erfahrung melden. (Murdoc? )
    Welche Vorteile/Nachteile gibt es?
    Auch angenommen ich erstelle mehrere Objekte von der Klasse B.
     
  2. 28. März 2009
    AW: [OOP] MySQL in 2.Klasse benutzen

    Vllt. solltest du überlegen einfach die MySQL-Instanz einmal beim Start des Scripts so anzulegen, dass global darauf zugegriffen werden kann also ne Wrapper-Klasse die die Verbindung statisch speichert und zurückgeben kann.
     
  3. 28. März 2009
    AW: [OOP] MySQL in 2.Klasse benutzen

    singleton-pattern:

    PHP:
    <? php
        
    class  MySQL
        
    {
            private static 
    $_instance  null ;
            private function 
    __construct () 
            {
                
    //verbinden etc. etc...
            
    }
            
            public static function 
    getInstance ()
            {
                if(!(
    self :: $_instance  instanceof  self ))
                    
    self :: $_instance  = new  self ();
                
                return 
    self :: $_instance ;
            }
        }
        
        class 
    extends  A
        
    {
            public function 
    __construct ()
            {
                
    $this -> db  MySQL :: getInstance ();
            }
        }
    ?>
    bei verschiedenen layern einfach noch ne factory einbaun
     
  4. 29. März 2009
    AW: [OOP] MySQL in 2.Klasse benutzen

    Danke für die Antworten!

    Ich habe mir jetzt diese Entwurfsmuster angeschaut, so wies aussieht ist das Singleton-Pattern genau das richtige, da man die MySQL Klasse nur einmal im gesamten Skript braucht. (In verschiedenen Klassen).

    Nur was ein "Layer" und ein Factory-Pattern ist habe ich nicht richtig verstanden.

    Heute morgen ist mir dann auch die Idee gekommen einfach die MySQL Klasse als Referenz zu übergeben/erstellen, scheint hier allerdings nicht so sinvoll oder ist das das selbe wie die Instanz zu übergeben? Habe ich da was grundlegend falsch verstanden?
     
  5. 29. März 2009
    AW: [OOP] MySQL in 2.Klasse benutzen

    Eine Klasse als Referenz übergeben? Du meinst eine Instanz? Die wird automatisch als Referenz übergeben...

    Murdoc hat mich auch schonmal hier auf den singleton pattern aufmerksam gemacht. Seit dem arbeite ich damit. Dadurch gewinnt das Programm etwas mehr an Modularität (falls es den Begriff gibt).
     
  6. 29. März 2009
    AW: [OOP] MySQL in 2.Klasse benutzen

    Autsch.
    Klar meinte ich eine Instanz.

    ------

    Könnte mir noch bitte jemand erklären was ein "Layer" in php ist?
    Factory weis ich jetzt.

    PS.: Nutzt von euch jemand Netbeans? Ich bekomme leider keine Autovervollständigung (Auflistung aller verfügbaren Methoden und Instanzvariablen) , wenn ich das ganze per Singleton mache.

    PHP:
    require_once  'class_mysql.php' ;
    public function 
    __construct () {
            
    $this -> _db  Mysql :: getInstance ();
            
    $this -> _db -> connect ();  // nach  "$this->_db" kommt keine Autovervollständigung, ich bin schreibfaul, kann ich das irgendwie ändern?
    }
     
  7. 29. März 2009
    AW: [OOP] MySQL in 2.Klasse benutzen

    mit layern meinte ich, wenn du verschiedene treiber für den datenbankzugriff verwendest.

    so:
    PHP:
    <? php
        
    class  Database
        
    {
            
    //methoden bla
            
            
    private static  $_instance  null ;
            public static function 
    getInstance ()
            {
                if(!(
    self :: $_instance  instanceof  self ))
                    
    self :: $_instance  self :: factory ();
                
                return 
    self :: $_instance ;
            }
            
            public static function 
    factory ()
            {
                
    $layer  'MySQL' ;
                if(!
    class_exists ( $layer ))
                    require 
    'pfad/zu/treibern/'  $class  '.php' ;
                
                return new 
    $layer ;
            }
        }
        
        class 
    MySQL  extends  Database
        
    {
            
    //methoden etc
        
    }
        
        class 
    extends  A
        
    {
            public function 
    __construct ()
            {
                
    $this -> db  Database :: getInstance ();
            }
        }
    ?>
     
  8. 29. März 2009
    AW: [OOP] MySQL in 2.Klasse benutzen

    Ah, ok danke.
    Jetzt hab ichs verstanden.
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.