Seite 1 von 1

$GLOBALS funktioniert nicht richtig

Verfasst: 08.10.2007, 07:27
von pvdb
Hallo,

es geht darum, dass ich ein Array von Varialennamen an eine Funktion übergebe, die mit diesen Variablen arbeitet. Am Ort der Übergabe ist nicht klar, ob diese Variablen existieren, daher werden nur die Namen der Variablen übergeben und nicht die Werte. Damit ich in der Funktion auf die Werte zugreifen kann, arbeite ich mit $GLOBALS. Leider haut dies nicht so hin, wie ich es gerne hätte.

Ich habe das Problem mal auf minimalen Code reduziert, dass es nachvollziehbar ist:

Code: Alles auswählen

<?
$art_id = 55;

show_value&#40;"art_id"&#41;;

function show_value&#40;$value&#41;
&#123;
   if &#40;isset&#40;$GLOBALS&#91;$value&#93;&#41;&#41;
   &#123;
      echo $value . "&#58; " . $GLOBALS&#91;$$value&#93;;
   &#125;
   else
   &#123;
      echo $value . " doesn't exist";
   &#125;
&#125;
?>
Wenn ich dies ausführe, erhalte ich diese Fehlermeldung:

Notice: Undefined variable: art_id in /Applications/MAMP/htdocs/xxx/test.php on line 8
art_id doesn't exist


Leider habe ich keinen Plan, wieso das nicht geht und vielleicht kannt mir da ja jemand helfen. Im Idealfall sollte er meiner Meinung nach den Wert anzeigen.

Mit global allein kann ich nicht arbeiten, da ich in meiner tatsächlichen Funktion nicht nur eine Variable, sondern mehrere nutze.

Phil

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 08.10.2007, 07:44
von Dante

Code: Alles auswählen

<? 
$art_id = 55; 

show_value&#40;"art_id"&#41;; 

function show_value&#40;$value&#41; 
&#123; 
   if &#40;isset&#40;$GLOBALS&#91;$value&#93;&#41;&#41; 
   &#123; 
      echo $value . "&#58; " . $GLOBALS&#91;$value&#93;; 
   &#125; 
   else 
   &#123; 
      echo $value . " doesn't exist"; 
   &#125; 
&#125; 
?> 
Sollte klappen, du brauchst bei sowas keine variablen Variablen.

Die Brauchst du nur in so einem Fall:

Code: Alles auswählen

<?php

$var1 = 'foobar';
$var2 = 'var1';

echo&#40;$$var2&#41;;
// gibt foobar aus

?>

Verfasst: 08.10.2007, 07:47
von pvdb
hi,

dass es so geht ist mir klar, ich brauche es jedoch innerhalb meiner funktion, da gehts leider nicht so einfach

phil

Verfasst: 08.10.2007, 07:50
von whyte
Hallo,

hast du evtl. safe_mode=on ?

Gruß

Verfasst: 08.10.2007, 07:54
von pvdb
safe_mode ist off

Verfasst: 08.10.2007, 08:08
von Dante
pvdb hat geschrieben:dass es so geht ist mir klar, ich brauche es jedoch innerhalb meiner funktion, da gehts leider nicht so einfach
Also willst du mit deiner u.g. Funktion auf eine globale Variable $55 (die es nicht geben darf) zugreifen?

Dann wäre es folgendes:

Code: Alles auswählen

<? 
$art_id = 55; 

show_value&#40;"art_id"&#41;; 

function show_value&#40;$value&#41; 
&#123; 
   if &#40;isset&#40;$GLOBALS&#91;$GLOBALS&#91;$value&#93;&#93;&#41;&#41; 
   &#123; 
      echo $value . "&#58; " . $GLOBALS&#91;$GLOBALS&#91;$value&#93;&#93;&#41;&#41; ; 
   &#125; 
   else 
   &#123; 
      echo $value . " doesn't exist"; 
   &#125; 
&#125; 
?> 
Falls es das nicht ist, schreib doch, wo du welchen Wert erwartest, dann kann ich vielleicht besser helfen...

Verfasst: 08.10.2007, 08:09
von pvdb
@dante

ich glaub ich hatte deinen beitrag eben nicht verstanden :) du wolltest mir doch sagen, dass ich gar nicht die $$ brauche, sondern ein $ ausreicht.

denn so haut es auch hin und wenn ich drüber nachdenke ist es auch logisch

Verfasst: 08.10.2007, 08:14
von Dante
pvdb hat geschrieben:ich glaub ich hatte deinen beitrag eben nicht verstanden :) du wolltest mir doch sagen, dass ich gar nicht die $$ brauche, sondern ein $ ausreicht.

denn so haut es auch hin und wenn ich drüber nachdenke ist es auch logisch
Genau das meinte ich mit "...du brauchst bei sowas keine variablen Variablen." ;-)

Verfasst: 08.10.2007, 14:51
von e-fee
Ich bin zwar jetzt auch nicht die Mega-PHP-Heldin, und es kann durchaus sein, dass so manches an mir vorbei gegangen ist, was möglich ist.

Aber mal eine ganz banale Frage: warum übergibst Du der Funktion "art_id" statt $art_id oder meinezwegen auch $GLOBALS["art_id"] ??? Also einen String statt einer Variablen mit einem numerischen Wert?
Für meine Begriffe ist es da kein Wunder, dass der Server da meckert.