Archiv verlassen und diese Seite im Standarddesign anzeigen : 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?
undefined
16-08-2004, 06:33
Arbeite mit serialize() dann geht es ;)
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
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:
$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:
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:
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:
$filelist_serialized=serialize($filelist);
function foo()
{
global $global_var1, $global_var2, $filelist_serialized;
$filelist=unserialize($filelist_serialized);
// do something
return $something;
}
foo();
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
$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...
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. :)
Welche PHP Version verwendest du denn?
Eventuell solltest du mal bei http://bugs.php.net vorbeischauen... ;)
Gruß,
Gaert
undefined
17-08-2004, 08:06
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.
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.
Welche PHP Version verwendest du denn?
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
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.