[PHP] Globale Deklaration der Datenbankklasse

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Die_Quelle, 27. Dezember 2009 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 27. Dezember 2009
    Globale Deklaration der Datenbankklasse

    Hallöchen,

    habe folgendes Problem:

    Ich möchte gewissen Komponenten und / oder Klassenobjekte global so deklarieren, dass sie auch in anderen Klassen verfügbar sind.

    zb. sollte die Datenbankklasse in allen weiteren benutzten Klassen verfügbar sein.
    Ich möchte jedoch nicht jede Klasse so schreiben das sie die mysql-Klasse oder die Templateklasse erweitern.

    Ich hatte gehoft es über "global $db = new Mysql(); " zu tun, aber okay ich glaube ich habe das global Schlüsselwort falsch interpretiert.
    ^^ =)

    Kann mir da jemand helfen wie man soetwas lösen könnte?
    danke im voraus
     
  2. 27. Dezember 2009
    AW: Globale Deklaration der Datenbankklasse

    Du musst global in jeder Funktion/Methode auf die Variable anwenden um sie als Globale zu deklarieren.

    PHP:
    $db  = new  Mysql ;

    function 
    a ()
    {
        global 
    $db ;
        
    //code..
    }

    function 
    b ()
    {
        global 
    $db ;
        
    //code..
    }

    function 
    c ()
    {
        global 
    $db ;
        
    //code..
    }
    oder du benutzt die Superglobale $GLOBALS:

    PHP:
    $db  = new  Mysql ;

    function 
    a ()
    {
        
    $GLOBALS [ 'db' ]->...
    }
    oder du Speicherst die Klasseninstanz in einer public static Klassenvariable.

    PHP:
    class  Core
    {
        public static 
    $db ;
    }


    function 
    x ()
    {
        
    Core :: $db ->...
    }
     
  3. 28. Dezember 2009
    AW: Globale Deklaration der Datenbankklasse

    oder als singleton, nicht ganz übersichtlich aber es geht
    PHP:
    <? php
    class  db
    {
        private static 
    $instance  NULL ;
        
        private function 
    __construct (){}

        public static function 
    run ()
        {
            if(!
    self :: $instance )
            {
                
    self :: $instance  = new  PDO ( 'mysql:host=localhost;dbname=test' , 'root' , 'tester' );
                
    self :: $instance -> setAttribute ( PDO :: ATTR_ERRMODE PDO :: ERRMODE_EXCEPTION );
            }
            return 
    self :: $instance ;
        }
        
        private function 
    __clone (){}
    }

    // und jetzt einfach anwenden
    $sql  "SELECT "
    $res  db :: run ()-> prepare ( $sql );
    while(
    $row  $res -> fetch ())  // u.s.w
    ?>
     
  4. 28. Dezember 2009
    AW: Globale Deklaration der Datenbankklasse

    okay also würde es reichen wenn ich in meinem konstruktor jeder / der klassen die das objekt enthalten sollen,... oder halt expizit im aufruf global $db->MeinMySQLKlassenBefehl(); aufrufe?!

    oder halt eine private variable in jeder klasse, die das objekt einmalig im konstruktor übergeben bekommt ... mhh klingt relativ plausibel =)

    okay ich werde das mal versuchen umzusetzen, danke =)
     
  5. 29. Dezember 2009
    AW: Globale Deklaration der Datenbankklasse

    keine private variable oder sonstige, benutze das singleton. spart ressourcen und rechenzeit
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.