Dieter: Variablen Namen ausgeben

Hallo,
also an eine Funktion wird der Variablen Name übergeben, allerdings _ohne_ $ vor dem Namen:

So wird z.B.: class->name übergeben.

Jetzt möchte ich, dass er dieses "Unterteilt", und zwar einmal in den Variablenname (class) und den "Anhang" (->name).

Naja aber irgendwie komm ich da jetzt nicht ganz weiter. Denn das Problem ist auch, die Funktion soll auch Arrays etc. erkennen.

Was ich bisher habe:

function vars($text)
{
echo "<b>".$text[1]."</b><br>";
}

$text = 'beispiel->feld';
$text = preg_replace_callback("/([a-z]*)/si","vars",$text);

P.S. Zum Test ist als Variablenname nur a-z erlaubt, kann später ja geändert werden.

Diese Funktion gibt aber folgendes aus:
<b>beispiel</b><br>
<b>feld</b>

Wie muss ich hier den regulären Ausdruck anpassen??

MFG
Dieter

  1. echo $begrüßung;

    also an eine Funktion wird der Variablen Name übergeben, allerdings _ohne_ $ vor dem Namen:

    So wird z.B.: class->name übergeben.

    $text = preg_replace_callback("/([a-z]*)/si","vars",$text);

    Wie muss ich hier den regulären Ausdruck anpassen??

    Zu dem [a-z]* müsstest du weitere Bedingungen mit dem "regex-Oder" hinzufügen.

    Allerdings sieht mir das ganze Vorhaben recht abenteuerlich aus. Wenn du willst, kannst du mal sagen, was du eigentlich erreichen willst. Dann können wir™ ja mal schauen, ob sich nicht was eleganteres findet.

    echo "$verabschiedung $name";

    1. Hallo,
      also an eine Funktion werden Variablen übergeben
      name->anhang
      oder
      name['array']->anhang

      Etc.

      Jetzt möchte ich, dass der Variablenname ersetzt wird, aber der Anhang erhalten bleibt. Diese Ersetzung ist etwas kompilzierter mit ein paar IF Anweisungen, darum müsste der Variablen name in einem String stehen.

      Hab jetzt folgendes:
      function vars($text)
      {
      echo "<b>".$text[1]."</b>".$text[2]."<br>";
      }

      $text = 'beispiel->feld['hallo']';
      $text = preg_replace_callback("/([1]*)(.*)/si","vars",$text);

      Geht soweit und ist genau was ich suche, allerdings soll dieses jetzt am besten als Array zurück gegeben werden, ca. so:
      function vars($text)
      {
      return array($text[1],$text[2]);
      //bzw: return $text;
      }

      Allerdings möchte ich nach dem preg_replace_callback(); auf die einzelnen Array-Elemente zugreifen können, dies geht leider nicht.

      P.S. Ich schreibe die Funktion in einer Class, da sieht es dann so aus:
      $text = preg_replace_callback("/([a-z]*)(.*)/si",array(&$this,'vars'),$varname);

      Und bin kein großer Freund von global Variablen ;)

      MFG
      Dieter


      1. a-z ↩︎

      1. Hallo,
        habs hinbekommen:

        Also er soll {$variable} durch <?php echo $GLOBALS['variable']; ?> ersetzen.

        $text = 'Dies ist ein {$test} mit {$_GET['test']}';
        $zeichen_vars = "[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*";

        $text = preg_replace_callback("/{\$($zeichen_vars)(.*?)}/si","variable", $text);

        function variable($variable)
           {
           $varname = $variable[1];
           $anhang = $variable[2];
           $varignore = array("GLOBALS","_GET","_POST","_SESSION","_COOKIE","_FILES","_ENV","_SERVER");

        if(!in_array($varname,$varignore))
              {
              return "<?php echo $GLOBALS['".$variable[1]."']".$variable[2]."; ?>";
              }
           else
              {
              return "<?php echo $".$variable[1].$variable[2]."; ?>";
              }
           }

        MFG
        Dieter