Anzeige:
Ergebnis 1 bis 12 von 12

Thema: [PHP] Kann man SO globale Variablen deklariert

  1. #1
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418

    [PHP] Kann man SO globale Variablen deklariert

    Hallo,
    ich habe eine Frage zu globalen Variablen, um sicherzugehen, dass das auch 100% korrekt ist:
    kann man so globale Variablen deklarieren & initalisieren:
    Code:
    $GLOBALS['bla']="bommel";
    ?

    In wie fern ist das ein Unterschied zu der Deklaration & Initialisierung einer Variablen außerhalb eines Funktionskörpers auf diese Art?
    Code:
    #...
    bla="bommel";
    #...
    function test()
    {
    	echo $GLOBALS['bla']."<br/>";
    }
    .

    Ich habe hier etwas seltsame "Erscheinungen" beim includen von Dateien (mit include()), die wiederum mit include() etwas inkludieren & diese wieder usw. usf..

    Wenn jemand Licht ins Dunkel bringen könnte, würde ich mich außerordentlich freuen

    Gruß, FLorian
    Ein gebrechlich Wesen ist der X-Server.

  2. #2
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Hallo Florian,

    Erstens: eine Variablendeklaration gibt es in PHP nicht...

    Zu deinen Beispielen...
    Es gibt folgende Möglichkeiten Globale Variablen zu deklarieren:

    PHP-Code:
    global $bla 'xyz';
    $GLOBALS['blabla'] = 'abc'
    Mit dem Schlüsselwort global kann man sich auch Variablen aus dem obersten Namensraum des Skripts in deine Funktionen importieren... mit $GLOBALS[] funktioniert das nicht.

    Beispiel:
    PHP-Code:
    $bla 'abc';

    function 
    a() {
    global 
    $bla;
    echo 
    $bla// Ausgabe: abc
    }

    function 
    b() {
    echo 
    $GLOBALS['bla'// Funktioniert nicht...

    Beispiel 2:
    Das Schlüsselwort global registriert die Variable automatisch in $GLOBALS;
    PHP-Code:
    global $bla 'abc';

    function 
    b() {
    echo 
    $GLOBALS['bla'//Ausgabe: abc

    Beispiel 3:
    Mit global kann man keine Variablen aus dem Namensraum einer Funktion verfügbar machen:

    PHP-Code:


    function a() {
    $bla 'abc';
    }

    a();


    global 
    $bla;
    echo 
    $bla// keine Ausgabe 
    Es gibt noch ein paar weitere Beispiele... aber da kannst du selbst noch ein wenig rumprobieren... generell gilt: das Arbeiten mit dem Schlüsselwort global ist etwas verwirrend - ich verwende deshalb grundsätzlich nur noch das $GLOBALS Array - da kann ich mir sicher sein, dass das was ich reingeschrieben habe auch überall (inklusive der Includes) gelesen werden kann.
    Bei der Objektorientierten Programmierung mit PHP5 verwende ich übrigens meistens statische Klassenvariablen statt Globale Variablen - reine Geschmackssache...

    PHP-Code:
    class container {
    {
       public static 
    $bla;

       public static function 
    setVar($var,$value) {
           
    self::$$var $value;
       }

       public static function 
    getVar($var) {
           return 
    self::$$var;
       }


    PHP-Code:
    container::setVar('bla','abc');

    function 
    xy() {
      echo 
    container::getVar('bla');
      
    container::setVar('bla','xyz');
    }

    echo 
    container::getVar('bla');
    xy();
    echo 
    container::getVar('bla'); 
    Hoffe das hat dir ein wenig geholfen.

    Gruß,

    Gaert
    Geändert von Gaert (01-11-2004 um 10:47 Uhr)


  3. #3
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Zitat Zitat von Gaert
    Hallo Florian,
    Beispiel:
    PHP-Code:
    $bla 'abc';

    function 
    a() {
    global 
    $bla;
    echo 
    $bla// Ausgabe: abc
    }

    function 
    b() {
    echo 
    $GLOBALS['bla'// Funktioniert nicht...

    .......
    Hoffe das hat dir ein wenig geholfen.

    Gruß,

    Gaert
    Gaert, ich gehe mal davon aus das du dich hier verschrieben hast
    Natürlich kann man Globals innerhalb von Funktionen Inittialisieren
    PHP-Code:
    <?php

    $bla 
    "abc";

    function 
    b() { 
        echo 
    "<pre>";
            
    print_r$GLOBALS );
        echo 
    "</pre>";
    }
    echo 
    b(); 
    ?>
    mfg undefined
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  4. #4
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Das Beispiel bezog sich auf folgendes:

    PHP-Code:
    function a() {
      echo 
    $GLOBALS['bla']; //Funktioniert nicht...
    }
    $bla "abc";
    a(); 
    im Vergleich zu

    PHP-Code:
    function a() {
      global 
    $bla;
      echo 
    $bla//Ausgabe: abc
    }
    $bla "abc";
    a(); 
    Ich denke das war auch die Antwort auf die ursprüngliche Frage...


  5. #5
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Kann ich nicht so stehen lassen
    Ein Variable vom setType (GLOBALS) ist sehr wohl innerhalb der Funktion GLOBAL. So lange sich die Initialisierung der Funktion nach der Festlegung der Variable kommt.
    PHP-Code:
    <?php
    function falsch()
    {
        if ( ! isset( 
    $GLOBALS['bla'] ) )
            echo 
    "nothing todo<br/>";
        else
            echo 
    "wo ist " $GLOBALS['bla'] . "<br/>";
    }

    function 
    a() {
       echo 
    "wo bin ich: " $GLOBALS['bla'] . "<br/>";
    }

    function 
    b() { 
       return 
    "Ich bin Global: " $GLOBALS['bla'];
    }

    falsch();

    $bla "abc";

    a();
    echo 
    b(); 
    ?>
    Du hast in deinem Beipiel aber auch sehr schön die Fallstrike von Globalen Variablen aufgeführt. Ist mit einer der häufigsten Fehler.

    mfg undefined
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  6. #6
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Okay, ich bin ein bisschen verwirrt

    Ich fass jetzt mal zusammen:

    Das hier funktioniert (obwohl Gaert gesagt hast, das funktioniert nicht):
    PHP-Code:
     function a() { 
      echo 
    $GLOBALS['bla']; //funktioniert doch

    $bla "abc"
    a(); 
    .

    Globale Variablen kann man so initialisieren:
    PHP-Code:
    $GLOBALS['bla']="abc"
    .

    Ist das jetzt korrekt?
    Ein gebrechlich Wesen ist der X-Server.

  7. #7
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Zitat Zitat von florian hanisch
    Okay, ich bin ein bisschen verwirrt

    Ich fass jetzt mal zusammen:

    Das hier funktioniert (obwohl Gaert gesagt hast, das funktioniert nicht):
    PHP-Code:
     function a() { 
      echo 
    $GLOBALS['bla']; //funktioniert doch

    $bla "abc"
    a(); 
    .
    Die Variable ist erst dann innerhalb einer FUNKTION Existent wenn sie vor dem Aufruf der Funktion Initialisiert wird.
    Mit GLOBALS kündigst dem PHP:Prozessor beim einlesen nur an hier ist eine Variable ist die später beim Aufruf im Globalen Namensraum zu finden ist
    FAZIT: Der jetzige CODE währe also richtig

    Globale Variablen kann man so initialisieren:
    PHP-Code:
    $GLOBALS['bla']="abc"
    .

    Ist das jetzt korrekt?
    Dies ist noch ein Syntax aus PHP 3 zeiten, viele benutzen ihn um es etwas Übersichtlicher zu haben. Du kannst es schreiben wie du möchtest.
    es ist also dier überlassen
    PS: Wenn du PHP5 verwendest schalte E_STRICT ein. Dann werden dir solche fehler angezeigt.
    mfg undefined
    Geändert von undefined (02-11-2004 um 12:19 Uhr)
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  8. #8
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Okay, schön!
    Jetzt noch eine Frage (auf die Gefahr hin, dass ihr euch wiederholen müsst):
    Zitat Zitat von undefined
    PS: Wenn du PHP5 verwendest schalte E_STRICT ein. Dann werden dir solche fehler angezeigt.
    Wie würde dann die Codestelle in PHP 5 heißen?
    Ein gebrechlich Wesen ist der X-Server.

  9. #9
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    In die oberste Datei und die erste Zeile
    PHP-Code:
    error_reportingE_ALL E_STRICT ); 
    mfg undefined
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  10. #10
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Stop.
    Ich meine die korrekte Initialisierung einer globalen Variable (statt $GLOBALS['bla']='abc')!
    Ein gebrechlich Wesen ist der X-Server.

  11. #11
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    [QUOTE=florian hanisch:
    Das hier funktioniert (obwohl Gaert gesagt hast, das funktioniert nicht):
    [/QUOTE]

    Habe z.Z. leider sehr wenig Zeit und im Moment auch gar nicht mit PHP, weshalb ich nichts ausprobiert habe - gut möglich, dass es in diesem Beispiel funktioniert - generell funktioniert es aber nicht (immer) auf diese Weise - warum hat undefined erklärt.

    PHP-Code:
    $GLOBALS['bla']="bommel"
    ist die "moderne" Art globale Variablen zu deklarieren


  12. #12
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Okay, allen vielen Dank!

    Mit $GLOBALS funktioniert jetzt alles bestens!

    Gruß, Florian
    Ein gebrechlich Wesen ist der X-Server.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •