Variablenname als String
Chris
- php
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')?
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
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!
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
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
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
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