Ankündigung

Einklappen
Keine Ankündigung bisher.

Generell Variable als "global" setzen möglich ?

Einklappen

Neue Werbung 2019

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

  • Generell Variable als "global" setzen möglich ?

    Hallo,

    Ich fang mal vorne an:

    Wenn man im php-Dokument eine Datei "included" kann man mit den Variablen arbeiten.
    Sobald man aber in einer Function mit dieser Variablen arbeiten will ist erstmal Schluss. Hier muss man dann diese Variable als "global" setzen oder die Datei in der Function nochmal includen.
    (Zumindest hab ich das bis jetzt so verstanden ...)

    Kann man sich das irgendwie sparen und Variable generell als "global" setzen ?

    Besten Dank schonmal im voraus.

    Matthias

  • #2
    $GLOBALS ist überall verfügbar und enthält alle Variablen des global scopes.
    PHP-Code:
    <?php
    $a 
    'abc';

    function 
    xyz() {
        echo 
    '->'$GLOBALS['a'];
    }
    xyz();
    ?>

    Aber eigentlich braucht man das nicht. Durch unnötig "importierte" Variablen verursachte Fehler sind verdammt ärgerlich weil oft schwer auffindbar.

    Kommentar


    • #3
      Kann man, ist aber nicht empfehlenswert, also lass es gleich wieder. Wenn du eine Funktion hast, die nicht alle benötigten Informationen als Parameter akzeptiert, dann ist da irgendwas faul mit der Funktion. Du kannst die superglobale $_GLOBALS verwenden.

      Aber wie gesagt: Lass es lieber, denn das ist ein Fehlerpool ohne Ende.

      Achja: Eine Datei mehrfach includen is noch eine schlechtere Idee

      Kommentar


      • #4
        Meine Herrn, seid Ihr schnell !

        Das mit $GLOBALS scheint wunderprächtig zu funktionieren ...

        Warum sollte man das also nicht nehmen ?

        Hintergrund:
        Ich hab mir einen GPL-Code Formmailer runtergeladen. Dummerweise werden die echo's bei falsch ausgefülltem Formular in Englisch ausgegeben. (Die echos stecken mitten in verschiedenen functions ...)
        Und somit dachte ich, ich zieh mir die echos aus einer Datei und fummel nicht bei jeder Rechtschreibreform mitten in der function rum ...

        Kommentar


        • #5
          Warum sollte man das also nicht nehmen ?
          FEHLERQUELLE! Dachte, ich hätte das erwähnt. Das is Flickschusterei und wird zu Problemen führen...

          Mal ne Idee zum drüber nachdenken: Du machst nen array mit den Übersetzungen und das übergibst du dann dem Formmailer Beispiel:
          PHP-Code:
          // Vorher:

          function sendMail ($msg) {
            
          // Blafasel
            
          echo "Message sent";
          }


          // Nachher

          $lng['de']['msg_sent'] = "Nachricht gesendet";
          function 
          sendMail ($msg,$lng,$uselng 'de') {
            
          // Blafasel
            
          echo $lng[$uselng]['msg_sent'];

          Kommentar


          • #6
            Hallo KingCrunch,

            also entweder ich stell mich nur an, oder wir reden aneinander vorbei ...
            (OK, ich tipp auf ersteres ... )

            Der folgende Code funktioniert nicht:
            PHP-Code:
            <?php

            $lng
            ['de']['msg_sent'] = "Nachricht gesendet - aussen";

            function 
            sendMail2 ($uselng) {
              
            // Blafasel
              
            echo $lng[$uselng]['msg_sent'];
            }

            sendMail2(de);
            ?>
            Der folgende Code funktioniert:
            PHP-Code:
            <?php
            function sendMail2 ($uselng) {
            $lng['de']['msg_sent'] = "Nachricht gesendet - innen";
              
            // Blafasel
              
            echo $lng[$uselng]['msg_sent'];
            }

            sendMail2(de);
            ?>
            Irgenwie tret ich auf der Stelle. Wie kann ich nun meine Echo-Meldung ausserhalb der function definieren und innerhalb der function verwenden ?

            Kommentar


            • #7
              Gib mal 'n String mit

              Kommentar


              • #8
                Du hast meinen Code nicht aufmerksam gelesen :P
                Ich übergebe $uselng nur dafür, falls man mal auf die Idee kommt mehr als eine Sprache zu implementieren.
                Das eigentliche Sprach-Array ist $lng, welches du vollständig ignoriert hast in deiner Funktionsdefinition
                Einfacher (ohne mehrfache Sprachauswahl) sähe es dann so aus
                PHP-Code:
                $lng['msg_sent'] = "Nachricht gesendet";
                function 
                sendMail ($msg,$lng) {
                  
                // Blafasel
                  
                echo $lng['msg_sent'];

                Vielleicht wird es jetzt ein wenig deutlicher, worauf ich hinaus will

                Kommentar


                • #9
                  Hallo KingCrunch,

                  OK, ich glaub ich habs verstanden ...

                  So in der Art könnte es ja dann am Ende aussehen:

                  myvars.php
                  PHP-Code:
                  <?php
                  $uselng 
                  de;

                  $lng['de']['msg_sent'] = "Nachricht gesendet";
                  $lng['en']['msg_sent'] = "Message sent";
                  $lng['by']['msg_sent'] = "i hobs gschiggd";

                  ?>
                  formmail.php
                  PHP-Code:
                  <?php
                  include 'myvars.php';

                  function 
                  sendMail ($lng,$uselng) {
                    
                  // Blafasel
                    
                  echo $lng[$uselng]['msg_sent'];
                  }
                  sendMail($lng,$uselng);
                  ?>
                  Besten Dank !

                  Kommentar


                  • #10
                    Wenn du hier error_reporting(E_ALL) setzt wird's dich anmeckern !!!!!

                    und zwar deswegen :

                    PHP-Code:
                    <?php
                    $uselng 
                    de;
                    ?>
                    Überliest mein kurzes Posting einfach oder was geht !?!?!??

                    Kommentar


                    • #11
                      Hallo M3g4Star,

                      Zitat von M3g4Star
                      ... Überliest mein kurzes Posting einfach oder was geht !?!?!??
                      Jain, ich war nur einfach froh, dass das ding endlich geht, sorry.

                      So besser ?

                      myvars.php
                      PHP-Code:
                      <?php
                      $uselng 
                      "de";

                      $lng['de']['msg_sent'] = "Nachricht gesendet";
                      $lng['en']['msg_sent'] = "Message sent";
                      $lng['by']['msg_sent'] = "i hobs gschiggd";

                      ?>

                      Kommentar


                      • #12
                        ja, wobei es $uselng = 'de'; auch tut

                        Ist sogar schneller, aber dazu solltest du am besten mal ein bisschen was lesen ^^

                        Kommentar


                        • #13
                          Zitat von CC84
                          ja, wobei es $uselng = 'de'; auch tut

                          Ist sogar schneller, aber dazu solltest du am besten mal ein bisschen was lesen ^^
                          Was nun schneller ist glaube ich nicht das das hire irgendeine relevanz hat du DU das eh nicht merkst weil die Performance
                          nciht unter den single oder double quotes leidet .. jedenfalls nicht spürbar für dich ..

                          die diskussion gabs schonmal, sogar samt messungen.

                          rein von der Logik her gesehn hat der Parser bei " " mehr zu tun, weil er erst im String nachschauen muss, ob sich da vielleicht noch $variablen
                          verstecken.

                          Ich denke das schon bezüglich syntax-highlighting für sehr
                          unschick und verwende grundsätzlich
                          PHP-Code:
                          <?php echo 'nur'.$solche.'konstrukte'?>
                          ,

                          setzt halt etwas mehr fleiß voraus *g* aber ich seh wenigstens WO sich meine Variablen befinden

                          ansonsten war das Messergebnis nur im für einen Menschen
                          nicht nachvollziehbaren Bereich, weshalb ich das nicht als wirklichen
                          Permormance-Streitpunkt ansehen würde.
                          Aber Grundlegend .. rein von dem Sinn her und von simplen Überlegungen sind single quotes schneller als double ...


                          bekannter recht.

                          Kommentar


                          • #14
                            Performance macht sich ja auch immer gerne im großen Rahmen bemerkbar: Wenn du 100 mal solche Strings in deinem Script hast und dann 100 Leute gleichzeitig auf das Script zugreifen, kann man sicherlich schon was merken

                            Kommentar


                            • #15
                              Dazu vielleicht die Test-Links:
                              PHP 4
                              PHP 5

                              Diesen Messungen nach macht es keinen Unterschied bei 100.000 durchläufen.

                              Kommentar

                              Lädt...
                              X