Variable-Name (als String) ausgeben
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
argument
aufruf
ausgabe
ausgeben
beispiel
bezeichnung
code
frage
funktion
http
inhalt
kommentierte teil
manual
problem
ressource
stehen
string
text
url
variable name
-
Hallo
wie bekomme ich den aktuellen Variable-Name als String ?
BSP:
$meinedaten = 'Blabla bla bla irgendwas';
ich will den Name der Variable: 'meinedaten' als String in einer neuen Variable haben
$varname = 'meinedaten';
damit ich als Ausgabe sowas machen kann wie:
print "<p> Der Inhalt von ".$varname." ist ".$meinedaten."</p>\n";
also nicht den Inhalt der Variable, sondern die Bezeichnung / den Name der Variable
.... ohne dass der Variable-Name vorher bekannt ist, ... innerhalb einer Funktion
nochmal als Anwendungs-Beispiel ...
function debug_print($var, $htm=false, $ret=false) { $var_str = print_r($var, true); if ($htm !== false) { $var_str = htmlentities($var_str); } $outstr = ''; // ---- wie bekomme ich den Name der Variable als Text ??? ## $varname = ????? ## $outstr = '<p>Name der Variable: <strong>' .$varname . '</strong></p>'."\n"; $outstr .= '<pre style="margin:18px 6px; padding:4px; text-align:left; background:#DEDEDE; color:#000099;">'."\n"; $outstr .= $var_str."\n"; $outstr .= '</pre>'."\n"; if ($ret !== false) { $result = $outstr; } else { print $outstr; $result = true; } return $result; }
der aus-kommentierte Teil zeigt mein Problem .... wie erhalte ich den Bezeichner / Name der Variable
also bei Aufruf ....debug_print($meinedaten);
soll in der Ausgabe auch der Name der Variable (hier: 'meinedaten') erscheinen.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Einige Lösungen, die man auch alleine bei Google finden kann:
http://stackoverflow.com/questions/255312/how-to-get-a-variable-name-as-a-string-in-php -
ok, Danke
diese zwei Funktionen funktionieren,
function print_varname1($var) { foreach($GLOBALS as $var_name => $value) { if ($value === $var) { return $var_name; } } return false; }
und
function print_varname2($var) { $var_name = array_search($var, $GLOBALS); return $var_name; }
bleibt die Frage, welche die "bessere" ist, also weniger Ressourcen verbraucht.
-
hackyourlife schrieb:
Also$blah = 'hallo'; $varname = 'blah'; echo $$varname; // gibt »hallo« aus
a) dazu müsste ich aber vorher wissen, dass 'blah' der Variable-Name ist
b) ich will nicht den Inhalt der $blah sondern wenn $blah übergeben wird, dann 'blah' als String
... einfach zu jeder x-beliebigen Variable, die an meine Funktion übergeben wird
deren "Bezeichnung" herausfinden / ausgeben,
siehe Anwendungs-Beispiel (debug_print Funktion oben)
BSP Aufruf
soll über dem <pre> stehen: Variable: haumichblaudebug_print($haumichblau);
oder
BSP Aufruf
soll über dem <pre> stehen: Variable: datenarraydebug_print($datenarray);
alternativ könnte ich die Funktion um ein Argument "varname" erweitern,
und den Bezeichner / Name der Variable auch noch (als String) übergeben
function debug_print($var, $varname='', $htm=false, $ret=false) { $var_str = print_r($var, true); if ($htm !== false) { $var_str = htmlentities($var_str); } $outstr = ''; $outstr = '<p>Variable: <strong>' .$varname . '</strong></p>'."\n"; $outstr .= '<pre style="margin:18px 6px; padding:4px; text-align:left; background:#DEDEDE; color:#000099;">'."\n"; $outstr .= $var_str."\n"; $outstr .= '</pre>'."\n"; if ($ret !== false) { $result = $outstr; } else { print $outstr; $result = true; } return $result; }
und dann bei Aufruf eben jedesmal den Name der Variable als 2tes Argument mit übergeben
BSP Aufrufdebug_print($haumichblau,'haumichblau');
oder
BSP Aufrufdebug_print($datenarray,'datenarray');
aber dann muss ich jeden Aufruf der Funktion entsprechend umschreiben
weil ja ein "neues" Argument dazu gekommen ist ... und sich folgende Argumente um 1 nach rechts verschieben
Warum sollte Keine von den beiden print_varname Funktionen verwendet werden ???
... damit funktioniert es doch, dass ich den Bezeichner / Name der Variable als String bekomme
-
Dann war das wohl ein Missverständnis, dennoch verstehe ich den Sinn dahinter nicht. Was soll den z.B. hier als Variablenname kommen?
Außerdem verlangsamen alle bisher genannten Methoden das Script unnötig.debug_print(7 * 6);
Noch ein letzter Punkt muss dir klar sein: deine Varianten funktionieren nur mit globalen Variablen.
Deine Varianten ließen sich übrigens auch so umsetzen (und wären dabei vermutlich effizienter):function debug_print($varname) { global $$varname; echo "$varname = ${$varname}"; } $blah = 'hallo'; debug_print('blah');
-
Hmm, also, als Lösung des Problemes ist das aber keine gute Lösung an sich.
Wenn ich das richtig sehe möchtest du eine Variable "debuggen" können, also den Wert, der in ihr gespeichert ist, ausgeben. Wenn du jetzt sagst:
$db = new PDO(...); debug_print($db, "db");
Wirst du rein keine Informationen erhalten, die dir in irgendeiner Weise nützen. Allgemein wirst du mit allem objektartigen Probleme haben, da du diese nicht in einem String verketten kannst. Deine Debugfunktion ist also irgendwie, so Leid es mit tut, "nutzlos", wenn es um richtiges debugging geht.
http://php.net/manual/de/function.var-dump.php
http://www.php.net/manual/de/function.print-r.php
http://www.php.net/manual/de/function.var-export.php
Solltest du dir unbedingt mal anschauen, da diese die Aufgabe schon weitreichend übernehmen.
Warum du nicht das $GLOBALS durchsuchen solltest ist einfach:
$a = 3; $b = 3; print_varname1($b); // wird a ausgeben
Sobald du 2 Variablen mit einem gleichen Inhalt hast, was in einem großen Projekt schnell vorkommen kann, ist die Sache gelaufen. noch lustiger dürfte werden:
function blah() { $a = 3; print_varname1($a); // wird niemals a ergeben, weil das a nicht in den $GLOBALS bereich kommt } blah();
In das $GLOBALS Array werden nur Globale Variablen geschrieben, lokale jedoch nicht. Diese kannst du daher nicht finden.
Du siehst, die Nutzung dieser Variante, die oben dargestellt wurde, wird nicht das bringen, was du willst.
Liebe Grüße
Beitrag zuletzt geändert: 9.9.2013 14:32:11 von ggamee -
auf dein original-beispiel:
linkrank schrieb:
fällt mir nur ein, so:
... nochmal als Anwendungs-Beispiel ...function debug_print($var, $htm=false, $ret=false) { $var_str = print_r($var, true); if ($htm !== false) { $var_str = htmlentities($var_str); } $outstr = ''; // ---- wie bekomme ich den Name der Variable als Text ??? ## $varname = ????? ## $outstr = '<p>Name der Variable: <strong>' .$varname . '</strong></p>'."\n"; $outstr .= '<pre style="margin:18px 6px; padding:4px; text-align:left; background:#DEDEDE; color:#000099;">'."\n"; $outstr .= $var_str."\n"; $outstr .= '</pre>'."\n"; if ($ret !== false) { $result = $outstr; } else { print $outstr; $result = true; } return $result; }
der aus-kommentierte Teil zeigt mein Problem .... wie erhalte ich den Bezeichner / Name der Variable$gesuchte_variablen_name = 'daswirdgesucht'; echo debug_print($gesuchte_variablen_name, $htm=false, $ret=false); function debug_print($var, $htm=false, $ret=false) { $var_str = print_r($var, true); if ($htm !== false) { $var_str = htmlentities($var_str); } $outstr = ''; // ---- wie bekomme ich den Name der Variable als Text ??? ## $varname = '?????' ## $outstr = '<p>Name der Variable: <strong>' .$varname . '</strong></p>'."\n"; $var_str = array_keys($GLOBALS, $var); $outstr .= '<pre style="margin:18px 6px; padding:4px; text-align:left; background:#DEDEDE; color:#000099;">'."\n"; $outstr .= $var_str[0]."\n"; $outstr .= '</pre>'."\n"; if ($ret !== false) { $result = $outstr; } else { print $outstr; $result = true; } return $result; }
(zeile 17 und 19) vorausgesetzt, nur eine einzige variable hat den inhalt 'daswirdgesucht'
Beitrag zuletzt geändert: 9.9.2013 17:29:06 von czibere -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage