Chris: Variablenname als String

Hallo zusammen

Wie kann ich mir den Namen einer PHP-Variablen als String ausgeben lassen? Bsp. Ich habe eine Variable namens $ID. Wie kann dafür sorgen dass ich einer neuen Variablen ($VarString) den Namen der Variablen (ohne $-Zeichen) zuweisen kann ($VarString = 'ID')?

  1. Hello,

    Wie kann ich mir den Namen einer PHP-Variablen als String ausgeben lassen? Bsp. Ich habe eine Variable namens $ID. Wie kann dafür sorgen dass ich einer neuen Variablen ($VarString) den Namen der Variablen (ohne $-Zeichen) zuweisen kann ($VarString = 'ID')?

    Einfach hinschreiben, so wie Du es gemacht hast.
    Man kann eine Variable nicht nach ihrem eigenen Namen fragen, obwohl das in PHP theroretisch sogar möglich wäre, die referenz rückwärts aufzulösen. Der Name bleibt ja in der Variablentabelle erhalten.

    Die kannst Du aber komplett auslesen:

    $_varnames = get_defined_vars();

    echo "<pre>\n";
      print_r($_varnames);
      echo "</pre>\n";

    Ich vermute aber, Du willst eine Metavariable zusammenbauen und über den der zweiten, der in der ersten gespeichert ist auf den Wert der zweiten zugreifen?

    $var2 = 'Hallo Welt';
      $var1 = 'var2';
      echo $$var1;

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Ich vermute aber, Du willst eine Metavariable zusammenbauen und über den der zweiten, der in der ersten gespeichert ist auf den Wert der zweiten zugreifen?

      $var2 = 'Hallo Welt';
        $var1 = 'var2';
        echo $$var1;

      Ich brauche die Variable in einer Funktion um dynamisch den WHERE Part einer SQL-Query zu generieren.

      Hier ein Beispiel (verkürzte Form):

      function WHERE($attr) {
      "WHERE ID='".$ID."'";
      }

      $WhereCondition = WHERE($ID);

      Nun das Beispiel funktioniert auch. Ich möchte aber, das der Attributname (hier ID=) ebenfalls dynamisch generiert wird. Dieser heisst nämlich immer gleich wie die übergebene Variable, einfach ohne $-Zeichen. Wie könnte ich das umsetzen? Danke für jeden Tipp!

      1. Hello,

        Ich brauche die Variable in einer Funktion um dynamisch den WHERE Part einer SQL-Query zu generieren.

        Hier ein Beispiel (verkürzte Form):

        function WHERE($attr) {
        "WHERE ID='".$ID."'";
        }

        $WhereCondition = WHERE($ID);

        Nun das Beispiel funktioniert auch. Ich möchte aber, das der Attributname (hier ID=) ebenfalls dynamisch generiert wird. Dieser heisst nämlich immer gleich wie die übergebene Variable, einfach ohne $-Zeichen. Wie könnte ich das umsetzen? Danke für jeden Tipp!

        Hier heißt die übergebene Variable aber '$attr', da der Namensraum innerhalb der Funktion nach außen abgegrenzt ist, und die Namen der Funktionsargumente eben in der Klammer deklariert werden.

        Außerdem ahne ich, dass Du Dir vielleicht Ärger einfangen möchtest mit Benutzereingaben, die dann im Query landen. Sowas sollte man nämlich nicht tun. Siehe 'SQL Inje[c|k]tion'

        Die praktikabelste Lösund wird es aber sein, der Funktion, die die einzelnen Query-Bestandteile zusammenbaut, Arrays bzw. ein Array zu übergeben. Damit ist man dann schon ziemlich nah an der Objektorientierung.

        $_query = array();

        $_query['type'] = 'select';
          $_query['from'][1] = 'tabelle_1';
          $_query['from'][2] = 'tabelle_2';
          $_query['where'][1]['name'] = 'id';
          $_query['where'][1]['value'] = '13';
          $_query['where'][2]['name'] = 'name';
          $_query['where'][1]['value'] = 'Müller'";

        In der Funktion kann man dann danach fragen, ob die einzelnen Elemente vorhanden sind, und daraus das Query generieren.

        Das ist jetzt natürlich nur eine Grundidee, denn Du musst ja auch "AND", "OR" usw. berücksichtigen.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. hi,

          Außerdem ahne ich, dass Du Dir vielleicht Ärger einfangen möchtest mit Benutzereingaben, die dann im Query landen. Sowas sollte man nämlich nicht tun. Siehe 'SQL Inje[c|k]tion'

          und nicht nur das, wenn die funktion mal mit $blah als parameter aufgerufen wird, es aber keine spalte namens blah in der tabelle gibt, gibt's eine fehlermeldung "unknown column blah in where-clause".

          gut, läge ja in der verantwortung des programmierers, die funktion nur mit "richtigen" variablen zu füttern.
          aber weißt du das in einem jahr selber noch, dass du nur variablen bestimmten namens übergeben darfst?
          und weiß das ein anderer programmierer, der evtl. mal deinen code benutzen wird?

          eine ordentliche schnittstellendefinition und damit wiederverwertbarer code sehen anders aus.

          gruß,
          wahsaga

          --
          "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        2. Hallo!

          $_query = array();

          $_query['type'] = 'select';
            $_query['from'][1] = 'tabelle_1';
            $_query['from'][2] = 'tabelle_2';
            $_query['where'][1]['name'] = 'id';
            $_query['where'][1]['value'] = '13';
            $_query['where'][2]['name'] = 'name';
            $_query['where'][1]['value'] = 'Müller'";

          So eine Funktion habe ich auch auch. Nur bediene ich keine mehrdimensionalen Arrays ... und erahne beim erstmaligen Durchlesen nur worum es geht. Also: Umschreiben!

          Danke, Tom
          Viennamade

  2. Huhu Chris

    beschäftige Dich mal mit Arrays.
    Besonders assoziative Arrays könnten interessant für Dich sein.

    http://www.php.net/manual/en/language.types.array.php
    http://www.php.net/manual/en/ref.array.php
    http://www.php.net/manual/en/language.operators.array.php
    http://php-faq.de/ch/ch-arrays.html

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday