Archiv verlassen und diese Seite im Standarddesign anzeigen : $$foo rückwärts
Hoi mal wieder.
Mal ne Frage, gibt es irgendeine Möglichkeit an den Namen einer Variable dran zu kommen?
Bsp:
$foo = "bar";
$varname = ominöseFunktion($foo);
echo $varname; //ergibt "foo"
Der Sinn der Frage ist mir nicht erkenntlich. Deshalb kann ich dafür auch keine Lösung finden.
$$foo rückwärts wäre:
echo $foo
den Namen einer Variablen kannst du ausserdem ausgeben mit:
echo substr ('$name',1);
wobei ich das für total Schwachsinnig halte weil du dann auch einfach gleich
echo 'name';
schreiben kannst.
penizillin 25-08-2005, 15:50 nein, afaik gibt es dafür keine möglichkeit, weil der name "foo" im scope der ominösenFunktion() einfach unbekannt ist. übergeben wird nur der wert "des ersten argumentes".
Danke penizilin. Hab auch überhaupt nix zu dem Thema gefunden. Eine Funktion wird es aus den dire genannten Gründen also überhaupt nicht sein können.....
@ilch.
nicht ganz richtig.
Wenn "$foo = 'hallo'" dann "$$foo = $hallo"
Ich sage deswegen rückwärts, weil ich den namen "foo" haben will, und wenn ich den wüßte, damit ich ihn mit 'echo "foo";' ausgeben könnte bräuchte ich eine solche Funktion nicht.
$foo ist eine Variable die ganz Normal benutzt wird und die auch einen Wert hat, ich interessieren mich aber für den Namen der Variable - ähnlich key() für arrays.
jahlives 25-08-2005, 16:03 Allenfalls könntest du wat mit nem RegEx basteln:
Die fragliche Datei einlesen. Dann sollte die "ominöse Fkt" den gesamten Inhalt durchsuchen nach dem = wert_der_var. Bei dieser Zeile dann mit einem RegEx (z.B.preg_match) nach $ gefolgt von jedem wortzeichen oder Zahl bis zum = heraussuchen. Bei diesem String das erste Zeichen abschneiden und mittels trim() allfällige Leerzeichen entfernen.
Das funzt nur so lange gut wie du nicht mehrere Vars auf einer Zeile hast und nicht mehrere Vars denselben Wert haben.
Wie gesagt, das ist ein Bastel und ich wüsste nicht wirklich einen praktischen Nutzen für so etwas.
Gruss
tobi
Danke. :D
Aber so ein gebastel will ich mir nicht antun. Dann bleibts so wies is.
Ich hab diese Nette Funktion geschrieben, array2getstr() (siehe: http://www.php-resource.de/forum/showthread.php?s=&threadid=58584) und ich würde mir eben gerne die Übergabe des Namens sparen. Der definiert sich ja im Normalfall durch den Namen des übergebenen Arrays.
Original geschrieben von jahlives
Das funzt nur so lange gut wie du nicht mehrere Vars auf einer Zeile hast und nicht mehrere Vars denselben Wert haben.
und so lange der wert der variablen nicht aus einer berechnung/operation stammt (oder lässt du dann auch noch eval drauf los ...?)
und so lange ihr wert seite scriptanfang noch nicht verändert wurde.
Quetschi 25-08-2005, 17:34 Irgendwie ist es ja schon komisch, was du da überhaupt willst.
Aber es gäbe IMHO einen Weg wenn man z.B. den Variablenamen zu einem bestimmten Wert suchen möchte - mit diesem Array wo alle Variablen drin sind (wie heißt es nochmal??) oder einfach get_defined_vars() nutzen und array_flip() - keine Ahnung ob du das von der Richtung aufgezogen brauchen kannst :dontknow:
penizillin 25-08-2005, 17:38 get_defined_vars() wird dir aber auch nur all die variablen ausgeben, die im gleichen gültigkeitsbereich existieren. und der name des parameters, mit dem die fkt. aufgerufen wurde, ist innerhalb der fkt. nicht bekannt.
Quetschi 25-08-2005, 17:50 ja klar, aber evtl. so:
$defined = get_defined_vars();
echo ominöse_function($defined,$suchwert);
Es macht ja sowieso keinen Sinn den Namen einer Variable ermitteln zu wollen, die man übergibt. Die 'Rückwärtssuche' wär evtl. vielleicht brauchbar - obwohl ich persönlich noch nie in die Situation gekommen bin sowas zu brauchen - denke eher, dass es hier generell an der Struktur des Scripts mangelt, wenn sowas gebraucht wird.
Danke euch für eure Antworten.
An der Struktur des Scripts mangelt es denke ich nicht, ich kann ja den Namen den der Array im GetSring haben soll mit übergeben, da ich ihn ja weiß.
Es geht auch nicht darum, den Namen der Variable in der Funktion zu ermitelln, das kann ruhig ausserhalb passieren.
So zum Beispiel: funktion_die_irgendwas_macht( besorg_namen($foo), $foo);
Mir ging es nur darum ob es überhaupt geht. Weil der name des Arrays ja feststeht ($foo), somit wäre es doch schön, wenn ich in dem aufgerufenen Script (in meinem Fall eine XML Schnittstelle) mit $_GET['foo'] da dran käme.
Und um das ganze möglichst flexibel zu halten dachte ich mir ich ermittel den Namen des Arrays anstatt ihn zu übergeben. Ähnlich key() bei Arrays.
Die Idee mit get_defined_vars() werd ich mal prüfen, allerdings hab ich ja kein Suchwort. Wenn ich das habe, kann ich der array2getstr Funktion ja auch den Namen mitgeben.
Ich glaub es handelt sich um ein kleines Henne-Ei-Problem.
Aber verstanden was ich will habt ihr, oder?
Ansonsten fragt nochmal, kann ja sein das es doch eine Lösung gibt.
Grad ne Idee bekommen:
$the_vars = get_defined_vars();
while($var = pos($the_vars)){
echo key($the_vars)." | ";
if(!array_diff($var, $arr_input)){
echo "found: ".key($the_vars)."\n";
}else{
echo "no\n";
}
next($the_vars);
}
So irgendwie, könnte das gehn?
Versteht das alles nicht falsch, es geht mir nicht dadrum so zu programmieren, momentan will ich hauptsächlich nur wissen ob das gehen würde.
|
|