Robin: per ${$string} auf superglobale

Hallo,

Ich bin gerade auf eine Merkwürdigkeit gestoßen und habe mich im Netz umgeschaut, warum dies so sein könnte. Leider habe ich nichts gefunden deswegen frage ich euch:

Mir gelingt es nicht per ${$variable} auf das superglobale Request-Array zuzugreifen. Mit ${"variable"} klappt dies aber. Ich bin ein wenig confused darüber, kann mir das vlt. mal jmd erklären? Ich arbeite schon ne ganze Weile mit diesen ${}-Konstrukt und stelle fest das ich nichtmal weiss wie man sowas überhaupt bezeichnet :P.

<code>
 <?php
 $string = "_REQUEST";
 echo "["; var_dump($string); echo "]<br>";
 if (isset(${$string})) {
   echo "Zugriff mit Variante A:<br>";
   print_r(${$string});
   echo "<br><br>";
 }

echo "["; var_dump("_REQUEST"); echo "]<br>";
 if (isset(${"_REQUEST"})) {
   echo "Zugriff mit Variante B:<br>";
   print_r(${"_REQUEST"});
   echo "<br><br>";
 }
 ?>
</code>

Vielen Dank,
Robin.

  1. Hallo Freunde des gehobenen Forumsgenusses,

    [code lang=php]
    <?php
    $string = "_REQUEST";
    echo "["; var_dump($string); echo "]<br>";
    if (isset(${$string})) {
       echo "Zugriff mit Variante A:<br>";
       print_r(${$string});
       echo "<br><br>";
    }

    [code]

    Warum verwendest du eigentlich nicht $_REQUEST?

    Gruß
    Alexander Brock

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Moin!

    Mir gelingt es nicht per ${$variable} auf das superglobale Request-Array zuzugreifen.

    Warum willst du das über diesen Umweg machen, und nicht direkt?

    Mit ${"variable"} klappt dies aber. Ich bin ein wenig confused darüber, kann mir das vlt. mal jmd erklären? Ich arbeite schon ne ganze Weile mit diesen ${}-Konstrukt und stelle fest das ich nichtmal weiss wie man sowas überhaupt bezeichnet :P.

    Das ist eine "variable Variable". Die geschweiften Klammern sind übrigens nicht notwendig, $$variable funktioniert auch.

    ALLERDINGS: Die Anwendung dieses Konstrukts ist als extrem negativ zu bewerten. Es gibt manche Situationen, in denen man sowas tatsächlich benötigt - aber die sind wirklich EXTREM SELTEN! Also verabschiede dich am besten davon, denn es macht deinen Code extrem unübersichtlich und fehleranfällig. Du müßtest extrem sorgfältig den Variableninhalt von $string prüfen, ob er ausschließlich erwünschte Inhalte enthält - denn über das Konstrukt der variablen Variable kann man ja auf jede existierende Variable zugreifen, wenn man nur deren Namen in $string einschmuggeln kann.

    Also bitte nicht machen!

    <code>

    Hehe, in diesem Forum hat die Codefunktion eckige Klammern, genauso wie die Links. Mit dem Attribut "lang" kann man dann noch Syntaxhighlighting für eine Sprache wählen. Siehe </hilfe/bedienung.htm#syntax-highlighting>

      
    
    >  <?php  
    >  $string = "_REQUEST";  
    >  echo "["; var_dump($string); echo "]<br>";  
    >  if (isset(${$string})) {  
    >    echo "Zugriff mit Variante A:<br>";  
    >    print_r(${$string});  
    >    echo "<br><br>";  
    >  }  
    >   
    >  echo "["; var_dump("_REQUEST"); echo "]<br>";  
    >  if (isset(${"_REQUEST"})) {  
    >    echo "Zugriff mit Variante B:<br>";  
    >    print_r(${"_REQUEST"});  
    >    echo "<br><br>";  
    >  }  
    >  ?>  
    
    

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!
  3. echo $begrüßung;

    Mir gelingt es nicht per ${$variable} auf das superglobale Request-Array zuzugreifen.

    Es ist im Handbuch im Kapitel zu den variablen Variablen in einem eingerahmten Kasten beschrieben, dass das nicht funktioniert. (Man beachte die inhaltlich unterschiedlichen Texte im englischen Original und der deutschen Übersetzung.)

    echo "$verabschiedung $name";