Enrico: Mit über "eval"-Befehl erzeugten Variablen weiterarbeiten

Hallo,

hier ein anderes Anliegen:

Mann kann ja mit dem eval-Befehl Strings wie regulären php-Code ausführen lassen:

  
$string = 'Bierglas';  
$name = 'Binding-Lager';  
  
$str = 'Das ist mein $string, voll mit $name.<br>';  
  
eval ("\$str = \"$str\";");  
  
echo $str;  

Eben aufgeführter Code führt zur Ausgabe "Das ist mein Bierglas, voll mit Binding-Lager."

In meinem konkreten Fall geht es mir darum, dass ich auf diese Weise Variablenzuweisung vornehme:

  
$Zuweisung = '$Variable = $Wert<br>';  
  
eval ("\$Zuweisung = \"$Zuweisung\";");  
echo $Zuweisung;  

Wie kann ich mit den so erzeugten Variablen weiter arbeiten und darauf zugreifen?

Erneut vielen Dank :-)

Gruß
Enrico

  1. Wie kann ich mit den so erzeugten Variablen weiter arbeiten und darauf zugreifen?

    Eigentlich doch genauso wie in deinem Beispiel gezeigt. Oder nicht?

    Zumindest falls das wirklich so geht wie du es zeigst.
    Du nennst deine Variablen ja beide gleich, das ist zum testen nicht unbedingt sinnvoll.

    eval ("$str = "$str";");

    Hier weist du das was in $str steht einer Variable namens $str (also der gleichen) nochmal zu. Ob das eval wirklich funktioniert hat, siehst du damit nicht, es stand ja vorher schon das gleiche drin.

    1. Hier die Fortsetzung, ich habs grad mal getestet. Das hier

      $str = 'Das ist mein ...';
      eval ("$str2 = "$str";");
      echo "str2: " . $str2;

      führt zum selben Ergebnis. Hier wurde also im eval eine Variable namens str2 erzeugt, mit der du danach weiterarbeiten kannst.
      Du hast in deiner Frage also eigentlich ja schon selbst die Lösung stehen. Worum gings dir genau?

      1. Hallo Encoder,

        ich habe Definitionen nach dem Muster $Variable = $Wert, so dass ich im Browser als Ausgabe beispielsweise Aktion = Eintragen oder Seite = 2 bekomme, d.h. ich habe keine "richtigen" Variablen mit voranstehendem Dollarzeichen.

        Und genau auf solche Variablen wie Aktion oder Seite muss ich reagieren und darauf zugreifen können.

        Gruß
        Enrico

        1. Da versteh ich ehrlich gesagt gar nix.

          Woher sind die Definitionen und was hast du mit denen vor? Wenn du im Browser bereits eine Ausgabe hast, was willst du dann mit den Variablen anfangen?

          Und genau auf solche Variablen wie Aktion oder Seite muss ich reagieren und darauf zugreifen können.

          Wo und wann?

          1. Hallo Encoder,

            so, habe es jetzt doch noch über eine Kombination aus...

              
            $Querystring = parse_url ($_SERVER ['QUERY_STRING']);  
            
            

            ...und...

              
            parse_str ($Querystring ['query']);  
            
            

            ...hinbekommen, was die gesamte Zeit nicht funktioniert hat.

            Danke Dir (und selbstverständlich auch dedlfix) für Hilfestellungen und Denkanstösse :-)

            Gruß,
            Enrico

            1. Tach!

              so, habe es jetzt doch noch über eine Kombination aus...
              $Querystring = parse_url ($_SERVER ['QUERY_STRING']);
              ...und...
              parse_str ($Querystring ['query']);
              ...hinbekommen, was die gesamte Zeit nicht funktioniert hat.

              Was machst du denn für umständliche Sachen? Wie lautet denn die Aufgabenstellung zum eigentlichen Problem? Steht nicht alles bereits fix und abgreifbar in $_GET?

              dedlfix.

              1. Hallo dedlfix,

                Steht nicht alles bereits fix und abgreifbar in $_GET?

                Jetzt ja, nachdem ich alles nochmal umgestellt habe.

                Lehrgeld bezahlt, das nächste Mal wird _vorher_ über den Aufbau nachgedacht und _dann_ los gelegt :-)

                Gruß
                Enrico

        2. Hallo Enrico,

          ich habe Definitionen nach dem Muster $Variable = $Wert, so dass ich im Browser als Ausgabe beispielsweise Aktion = Eintragen oder Seite = 2 bekomme, d.h. ich habe keine "richtigen" Variablen mit voranstehendem Dollarzeichen.

          Und genau auf solche Variablen wie Aktion oder Seite muss ich reagieren und darauf zugreifen können.

          Dein Problem erledigt sich von selbst, wenn Du statt komplizierten und höchst schwierig zu debuggenden eval-Statements die einfach zu handhabenden Arrays verwendest, wie Dir dedlfix schon empfohlen hat.

          Freundliche Grüße

          Vinzenz

  2. Tach!

    In meinem konkreten Fall geht es mir darum, dass ich auf diese Weise Variablenzuweisung vornehme:
    $Zuweisung = '$Variable = $Wert<br>';
    eval ("$Zuweisung = "$Zuweisung";");

    Das geht auch mit variablen Variablen. eval() hat noch das Problem, dass bestimmte Stringinhalte (Anführungszeichen) aus dem von dir vorgesehenen Kontext ausbrechen können, wenn du sie nicht beachtest.

    Wie kann ich mit den so erzeugten Variablen weiter arbeiten und darauf zugreifen?

    Wie auf jede andere Variable auch. Die Frage lässt mich allerdings vermuten, dass du gar nicht weißt, welche Variablennamen dir diese Vorgehensweise anlegt. Ich weiß nicht, was für ein konkretes Problem du auf diese Weise zu lösen versuchst, aber üblicherweise kommt man in den Fällen, in denen man mit solchen Lösungen liebäugelt, mit einem Array statt einzelner Variablen besser zurecht.

    dedlfix.