Anzeige:
Ergebnis 1 bis 10 von 10

Thema: zweidimensionales Array als globale Variable

  1. #1
    tillb
    Gast

    zweidimensionales Array als globale Variable

    Hallo!

    Ich will innerhalb einer Funktion auf ein außerhalb bereits existierendes zweidimensionales, assoziatives Array zugreifen.

    Wenn ich das Array als Parameter übergebe arbeitet die Funktion wie geplant. Wenn ich das Array aber als globale Variable einbinde klappt gar nichts mehr.

    Kann man zweidimensionales Arrays nicht als globale Variablen benutzen?

  2. #2
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Arbeite mit serialize() dann geht es

  3. #3
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Mich würde mal interessieren, warum die Funktion "nicht wie geplant" arbeitet, wenn du ihr ein Array übergibst.
    Vielleicht machst du dir auch einen Umstand, der gar nicht nötig ist - poste mal bitte die Funktion.
    Globale Variablen sind ein Übel, was man am besten vermeiden sollte.

    Gruß,

    Gaert


  4. #4
    tillb
    Gast
    Zitat Zitat von Gaert
    Globale Variablen sind ein Übel, was man am besten vermeiden sollte.
    Ich weiß, aber für dieses konkrete Script will ich, daß keine Parameter an die Funktion übergeben werden müssen.

    Mir serialize und unserialize funktioniert es.

    Vielen Dank.


    Dennoch hier noch der Code zu dem Problem:

    Zuerst das Array um das es geht:
    PHP-Code:
    $filelist = array(    "name1" => array(    "file1.zip",
                                                
    "description1"),
                            
    "name2" => array(    "file2.zip",
                                                
    "description2"),
                            
    "name3" => array(    "file3.zip",
                                                
    "description3")); 
    Hier die erste Version mit globaler Variable die nicht funktioniert:
    PHP-Code:
    function foo()
        {
            global 
    $global_var1$global_var2$filelist;

            
    // do something
            
            
    return $something;
        }

    foo(); 
    Es hatte den Eindruck als wäre die Struktur des Arrays verloren gegangen. (möglicherweise weil die globalen Variablen von PHP intern auch als Array behandelt werden - aber auch der Aufruf $GLOBALS["filelist"] brachte nichts).

    Diese Variante funktionierte problemlos:
    PHP-Code:
    function foo($filelist)
        {
            global 
    $global_var1$global_var2;
            
            
    // do something

            
    return $something;
        }

    foo($filelist); 
    Die anderen globalen Variablen waren keine Arrays.

    Ich habe jetzt folgende (funktionierende) Lösung:
    PHP-Code:
    $filelist_serialized=serialize($filelist);

    function 
    foo()
        {
            global 
    $global_var1$global_var2$filelist_serialized;
            
            
    $filelist=unserialize($filelist_serialized);
            
            
    // do something

            
    return $something;
        }

    foo(); 

  5. #5
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Sorry,

    aber ich kann dein Problem leider nicht nachvollziehen... bin leider zu beschäftigt jetzt alles auszutesten, aber eigentlich sollte es keine Probleme mit Arrays und $GLOBALS geben.
    Mach in der Funktion mal ein vardump() oder print_r() auf das Array.

    Das hier funktioniert bei mir ohne Probleme:
    PHP-Code:
    <?php
    $filelist 
    = array(    "name1" => array(    "file1.zip",
                                                
    "description1"),
                            
    "name2" => array(    "file2.zip",
                                                
    "description2"),
                            
    "name3" => array(    "file3.zip",
                                                
    "description3"));  
                                                
    $GLOBALS['filelist'] = $filelist;
    function 
    foo() {
        
    print_r($GLOBALS['filelist']);
    }
    foo(); 
    ?>
    PS: Die Verwendung von "global" ist IMHO ein wenig altbacken...
    Geändert von Gaert (16-08-2004 um 21:40 Uhr)


  6. #6
    tillb
    Gast
    Jetzt wirds verrückt:

    Dieser Code funktioniert bei mir auch super.


    Und jetzt wirds ganz verrückt:

    den Ausgaben von vardump() und print_r() zufolge ist das Array in den nicht funktionierenden Beispielen unverändert und es klappt trotzdem nicht.


    Da die Funktion mit serialize jetzt fehlerfrei funktioniert habe ich im Moment keine Lust weiter rumzuprobieren.
    Ich werde morgen den Direktzugriff auf's $GLOBALS-Array aus deinem Beispiel einbauen, weil's einfach sauberer ist als mit serialize.

    Vielen Dank für die Hilfe.

  7. #7
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Welche PHP Version verwendest du denn?
    Eventuell solltest du mal bei http://bugs.php.net vorbeischauen...

    Gruß,

    Gaert


  8. #8
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Ist eigentlich kein bug sondern eine alte geschichte unter PHP.
    Variablen die man als GLOBALS Deklariert werden nicht direkt innerhalb eines staks und einer PHP Methode erkannt. Diese erscheinung habe ich des öfteren.
    Was im übrigen auch für definierte Konstanten gilt. Ein anheben des error_reporting unter PHP5 auf 2048 gibt aber einen Aufschluss woran es liegt. Generel sollte man gerade bei OOP darauf achten das Globale Variablen innerhalb einens staks zuerst initialisiert werden und dann erst verwendung finden.

  9. #9
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Stimmt,
    Ich kenne das von früher, als das das $GLOBALS Array noch nicht gab.
    Wenn man damit arbeitet hat man diese Probleme nicht mehr.


  10. #10
    tillb
    Gast
    Zitat Zitat von Gaert
    Welche PHP Version verwendest du denn?
    Code:
    PHP 4.3.5 (cli) (built: Mar 30 2004 09:21:23)
    Copyright (c) 1997-2004 The PHP Group
    Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

Lesezeichen

Berechtigungen

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