kostenloser Webspace werbefrei: lima-city


Variable-Name (als String) ausgeben

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    linkrank

    linkrank hat kostenlosen Webspace.

    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.


  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Autor dieses Themas

    linkrank

    linkrank hat kostenlosen Webspace.

    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.



  4. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    linkrank schrieb:
    bleibt die Frage, welche die "bessere" ist, also weniger Ressourcen verbraucht.
    Keine von beiden sollte verwendet werden!

    Wie es richtig funktioniert wird hier beschrieben (und bitte auch nur so verwenden).

    Also
    $blah = 'hallo';
    $varname = 'blah';
    echo $$varname; // gibt »hallo« aus
  5. Autor dieses Themas

    linkrank

    linkrank hat kostenlosen Webspace.

    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
    debug_print($haumichblau);
    soll über dem <pre> stehen: Variable: haumichblau
    oder
    BSP Aufruf
    debug_print($datenarray);
    soll über dem <pre> stehen: Variable: 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 Aufruf
    debug_print($haumichblau,'haumichblau');

    oder
    BSP Aufruf
    debug_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


  6. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Dann war das wohl ein Missverständnis, dennoch verstehe ich den Sinn dahinter nicht. Was soll den z.B. hier als Variablenname kommen?
    debug_print(7 * 6);
    Außerdem verlangsamen alle bisher genannten Methoden das Script unnötig.

    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');
  7. g****e

    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
  8. auf dein original-beispiel:
    linkrank schrieb:
    ... 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
    fällt mir nur ein, so:
    $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
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!