PDO Object Übergreifend benutzen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PDO Object Übergreifend benutzen

    N'abend zusammen!


    Ich habe folgendes Problem, ich baue eine Verbindung zur Datenbank über

    PHP-Code:
    $dbl = new PDO("mysql:host=localhost;dbname=XXX""XX""XX"); 
    auf. Will ich das $dbl Objekt nun in einer Funktion nutzen, so ist die Variabel nicht mehr verfügbar. Wie kann ich dieses Problem elegant lösen?

    $dbl der Funktion mit übergeben oder jedesmal bei einem Funktionsaufruf die Verbindung neu öffnen?

    Auf SQL Aufrufe in Funktionen einfach verzichten?

    Danke im Vorraus

  • #2
    In der Regel übergibt man benötigte Parameter an die Funktion. So verhält es sich auch um eine Verbindungskennung. Jedes mal neu verbinden wäre unnötig, wenn ohnehin bereits eine Verbindung steht.
    Man kann (in einer objekt orientierten Umgebung ) durch das Registry Pattern auch soetwas wie einen globalen Raum für applikationsweite Parameter schaffen:
    PHP-Code:
    class Registry
    {
        protected 
    $_registry = array();

        static public function 
    set($offset$value)
        {
            
    self::$_registry[$offset] = $value;
        }

        static public function 
    get($offset)
        {
            return (isset(
    self::$_registry[$offset]) ? self::$_registry[$offset] : null);
        }
    }

    // somewhere far, far away

    Registry::set('db_connection', new PDO('...'));
    Registry::get('db_connection'); 
    Das sollte in deinem Fall aber nicht nötig sein.

    Grüße
    Zuletzt geändert von Griecherus; 12.08.2008, 00:53.
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      Also wäre es Programmiertechnisch auch völlig korrekt die $dbl Variabel zu übergeben? Ich weiß, es handelt sich dabei auch nur um eine Variabel, aber war mir unsicher, da es ja eine Variabel ist, über die ich mit MySQL kommuniziere.

      Sollte es so ok sein, brauch ich ja nur 1 Variabel mehr pro Funktionsaufruf zu übergeben.

      Kommentar


      • #4
        Ja, natürlich ist das in Ordnung so.

        Grüße
        Nieder mit der Camel Case-Konvention

        Kommentar


        • #5
          Ja, natürlich ist das in Ordnung so. In einigem Fremde-Code wirst du zweifellos auch auf Konstrukte wie
          PHP-Code:
          global $db
          innerhalb einer Funktionsdefinintion finden. Lass dich nicht von der dunklen Seite der Macht verführen.

          Grüße
          Zuletzt geändert von Griecherus; 12.08.2008, 01:05.
          Nieder mit der Camel Case-Konvention

          Kommentar


          • #6
            Super, danke für die schnelle Antwort. Ich habe "global" noch nie verwendet.

            Zuviel schlechtes gehört

            Kommentar


            • #7
              @Griecherus:

              Warum genau soll man kein global verwenden?
              Ich brauchte es zwar bis jetzt noch nicht, aber würds gern wissen

              mfg

              Kommentar


              • #8
                Weils zu einfach ist und nicht minds. 5 Zeilen Code sind

                Kommentar


                • #9
                  Original geschrieben von Skaschy
                  Weils zu einfach ist und nicht minds. 5 Zeilen Code sind
                  Tatsächlich bedeutet ein global $var; mindestens eine Zeile mehr im Vergleich dazu, die Variable an die Funktion zu übergeben.

                  @Blackgreetz: Es ist generell zu empfehlen, den Namensraum von Funktionen wie Klassen möglichst "sauber" zu halten. Globale Variablen sind nachteilhaft für die Struktur, da die Abhängigkeiten nicht klar ersichtlich sind und debuggen im Fehlerfall damit zum Krampf werden kann. Woher kommt eine globale Variable? Ein Funktionsparameter hingegen ist exakt dort zu finden, wo die Funktion aufgerufen wird. Darüber hinaus möchte man seinen Code ja möglicherweise wiederverwendbar konzipieren. Solche (global)Abhängigkeiten "nach außen" machen das schwer.

                  Gute Nacht
                  Zuletzt geändert von Griecherus; 12.08.2008, 02:46.
                  Nieder mit der Camel Case-Konvention

                  Kommentar

                  Lädt...
                  X