Ankündigung

Einklappen
Keine Ankündigung bisher.

Geltungsbereich mysqli Objekt

Einklappen

Neue Werbung 2019

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

  • Geltungsbereich mysqli Objekt

    Hallo!

    Ich bin gerade dabei, meine Scripte an das objektorientierte MySQLi anzupassen.

    Dabei ist mir aufgefallen, dass das Objekt ($db) in keiner der Funktionen gültig ist.

    Muss ich das jetzt in jeder Funktion mit "global $db;" ändern, oder gibt es einen Befehl, den ich nur einmal verwenden brauche, um den gleichen Effekt zu erziehen?

    Vielen Dank!


  • #2
    Entweder per Singleton reinladen oder $GLOBALS['db'] nutzen. Deine Skripte sind dann aber nur bedingt wiederverwendbar.

    Kommentar


    • #3
      R4v3r
      Version mysql?

      cool manual SQL >> http://criovatcompany.com/services.html
      [url]www.page-secure.com[/url]

      Kommentar


      • #4
        Guckst Du http://www.php.net/manual/de/languag...bles.scope.php

        Kommentar


        • #5
          Oder (falls du sie in einer Objekt reinlädst) als Objektvariable speichern. Dann is sie im ganzen Objekt per $this->db verfügbar
          Nicht jeder Fehler ist ein Bug.

          Kommentar


          • #6
            Hallo!

            Danke für die Hilfe!

            Habe mich nun doch dazu entschlossen das "global $db;" in jede Funktion zu schreiben, da dies die einfachste und beste Lösung zu sein scheint.

            Kommentar


            • #7
              Wie es halt so ist, die einfachste ist gleichzeitig auf die schlechteste Lösung!

              Hier hatte ich schoneinmal ein Posting dazu verfasst:
              http://www.phpfriend.de/forum/ftopic61466.html#424112
              (vielleicht besser den ganzen Thread lesen)

              Mach es lieber von Anfang an Richtig, übergebe deinem Konstruktor den Datenbank-Link (Rückgabewert von mysql_(p)connect) und speichere ihn als Objekt-Eigenschaft ($this->db).

              Es ist ein minimaler Mehraufwand, aber du machst es dafür gleich richtig.

              Kommentar


              • #8
                Interessant, hast die Schlechteste erwischt ^^ Der globale Geltungsbereich sollte so frei wie möglich gehalten werden. Bei dir gäbe es nun noch die besseren Varianten:

                1. $GLOBALS
                PHP-Code:
                $GLOBALS['db'] = $db;

                // some code

                function xy ($x,$y) {
                  
                $db $GLOBALS['db'];

                2. Als Parameter (besser!)
                PHP-Code:
                function xy ($x$y$db) {
                  
                // $db existiert jetzt hier;)

                Problem ist, dass globale Variablen mehr Probleme verursachen, als das sie nützen. Irgendwann kommt es zu einem Fehler und man sucht tagelang nach der Ursache (und das darfst du wörtlich nehmen ). Mit den anderen beiden Methoden kannst du einfach stärker kontrollieren was wie worein kommt.


                Edit: Mist, da warste schneller Aber soweit ich das verstanden habe, will er selbst nur Funktionen schreiben, keine Klassen.
                Nicht jeder Fehler ist ein Bug.

                Kommentar


                • #9
                  $GLOBALS ist übrigens genauso schlecht wie global

                  Kommentar


                  • #10
                    Naja, seh ich etwas anders, da man die Werte in $GLOBALS nicht einfach "aus Versehen" durch "ungünstig Wahle eines Variablenbezeichners" versauen kann Nungut, geb dir aber Recht, ich selbst benutzt auch nur noch Klassen-/Objektvariablen und Parameter und bisher gabs nix, was auf diesen Weg nicht lösbar war.
                    Nicht jeder Fehler ist ein Bug.

                    Kommentar


                    • #11
                      Zitat von KingCrunch
                      Naja, seh ich etwas anders, da man die Werte in $GLOBALS nicht einfach "aus Versehen" durch "ungünstig Wahle eines Variablenbezeichners" versauen kann
                      Vielleicht fehlt mir da auch die Erfahrung, aber ich dachte beides wäre gekoppelt, sprich jeweils eine Referenz auf die selbe Variable.

                      Kommentar


                      • #12
                        ähm ... *hust* ... öhm ^^ *HandbuchRauskram* Also da steht nur, dass $GLOBALS eine Referenz auf alle globalen Variablen besitzt, nicht aber, wie es sich anders herum verhält... Darüber schweigt sich das Handbuch aus ^^ (Die deutsche Fassung zumindest)

                        Kurz mal angetestet:
                        PHP-Code:
                        $GLOBALS['test'] = 'test';
                        function 
                        test () {
                            echo 
                        $GLOBALS['test'] . $test;
                        }
                        test (); 
                        Code:
                        test
                        Notice: Undefined variable: test in C:\path\to\test.php on line 163
                        PHP-Code:
                        $test 'test';
                        function 
                        test () {
                            global 
                        $test;
                            echo 
                        $GLOBALS['test'];
                            echo 
                        $test;
                        }
                        test (); 
                        Code:
                        testtest
                        Wir halten fest: $GLOBALS nimmt alle globalen Variablen auf, setzt aber selbst keine. Trotzdem gibt es da ein Problem, wie mir jetzt beim Testen auffiel:
                        PHP-Code:
                        $GLOBALS['test'] = 'GLOBALS';
                        $test 'Variable';
                        function 
                        test () {
                            global 
                        $test;
                            echo 
                        $GLOBALS['test'];
                            echo 
                        $test;
                        }
                        test (); 
                        Code:
                        VariableVariable
                        Wir halten nochmal fest: $GLOBALS und globale Variablen kombinieren ist noch schlimmer, als nur eins von beiden zu verwenden
                        Nicht jeder Fehler ist ein Bug.

                        Kommentar


                        • #13
                          Ich weiß nicht, den Kram sollte man einfach nicht benutzen, fertig

                          Kommentar

                          Lädt...
                          X