[Funktion] Variablen-Name in Funktion auslesen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Funktion] Variablen-Name in Funktion auslesen

    Hallo liebe Wissenden!

    Ich würde gerne in einer Debugg-Funktion die Namen der ihr übergebenen Variablen auslesen.

    An die Funktion werden 1 bis ... Arrays übergeben und per func_get_args() in einer anschließenden Schleife ausgelesen und verarbeitet.
    Nun hätte ich gerne vor dem jeweiligen Output den Namen der Variablen gesetzt. Meine Frage hierzu:
    • Ist sowas möglich?
    • Gibt es vllt eine php-Funktion dafür (die ich bis jetzt noch nicht gefunden habe)?
    • Oder weiß jemand einen Ansatz oder eine Lösung?

    Habe es auch schon mit
    PHP-Code:
    foreach($var as $key => $val) { $k $key; } 
    versucht, aber das funktioniert nicht mit func_get_args(). Da bekomme ich als Array-Key 1, 2, 3, .... nicht aber den Namen.

    Meine Funktion bis jetzt:
    PHP-Code:
    function functionName() {
        
    $res NULL;
        
    $args func_get_args();
        for (
    $i=0$i<count($args); $i++) {
            
    $res .= $name_der_varable// Ausgabe im Format [B]Variablen_Name => Array ( ... )[/B] o.ä.
            // verarbeitung des arrays
        
    }
        return 
    $res;

    Danke. Grüße. andyB.

  • #2
    Meines Erachtens nach dürfte das nicht gehen. Ich lasse mich aber gerne eines Besseren belehren.
    Wieso interessiert das deine Debug Funktion eigentlich?
    Möglicherweise hilft dir ja get_defined_vars() weiter.

    Grüße
    Zuletzt geändert von Griecherus; 18.02.2008, 18:18.
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      Original geschrieben von Griecherus
      Wieso interessiert das deine Debug Funktion eigentlich?
      Ich übergebe an die Funktion an verschiedenen Stellen unterschiedliche Variablen, die ich voher nicht kenne.
      Wäre schön gewesen wenn die Funktion sagen könnte "variable $x hat folgenden inhalt : [...]" !
      Original geschrieben von Griecherus
      Möglicherweise hilft dir ja get_defined_vars() weiter.
      Leider nicht. Wenn ich das in meiner Funktion vor $args=func_get_args() aufrufe, gibt die funktion nur ein leeres Array zurück.
      Wenn ich es dannach aufrufe, bekomme ich den Inhalt von $args als Multidimensionales-Array zurück; aber nicht wirklich das was ich wollte ...

      Nun gut, werd ich halt (wahrscheinlich) ohne leben müssen ...
      Trozdem Danke. Grüße. andyB.

      Kommentar


      • #4
        Original geschrieben von andyB
        Ich übergebe an die Funktion an verschiedenen Stellen unterschiedliche Variablen, die ich voher nicht kenne.
        Wäre schön gewesen wenn die Funktion sagen könnte "variable $x hat folgenden inhalt : [...]" !
        Dann gib deiner Debug Funktion doch noch ein __FILE__ und __LINE__ mit, dann hast du zumindest die Position der Variablen.
        Nieder mit der Camel Case-Konvention

        Kommentar


        • #5
          Dann gib deiner Debug Funktion doch noch ein __FILE__ und __LINE__ mit, dann hast du zumindest die Position der Variablen.
          Du könntest dann auch noch, wenn dir die Variablennamen so wichtig sind, die Datei auslesen und in entsprechender Zeile die Variablennamen extrahieren. Ist nur doof, wenn die Zeile so aussieht:
          PHP-Code:
          myDebug$var1$var2 );myDebug$var3 );myDebug$var4$var5$var6 ); 

          Kommentar


          • #6
            Dann gib deiner Debug Funktion doch noch ein __FILE__ und __LINE__ mit, dann hast du zumindest die Position der Variablen.
            Mit debug_backtrace kann man sich das auch sparen.
            Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

            Kommentar


            • #7
              Original geschrieben von tontechniker
              Mit debug_backtrace kann man sich das auch sparen.
              Die Funktion ist auch ganz nett, aber ich erhalte da halt als ergebnis:
              Code:
              [...]
              ["args"]=>
                  array(2) {
                    [B][0]=>[/B]
                    &array(0) {
                    }
                    [B][1]=>[/B] 
                    &array(0) {
                    }
                  }
              [...]
              Aber eben nicht den Namen der Variablen.

              Ich hätte halt gerne:
              PHP-Code:
              $var_1 = array();
              $var_2 = array();
              // ...

              function functionName() {
                    
              $args func_get_args();
                    
              // hier tut die funktion was sie soll
                    
              echo "<pre>";
                    for (
              $i=0$i<count($args); $i++) {
                          echo 
              "Das Array [" $arrayName "] hat folgenden Inhalt: "// Auf diese Zeile kommt es mir an!
                          
              print_r($args[$i]);
                    }
                    echo 
              "</pre>";
              }

              // Aufruf
              functionName($var_1$var_2, ...);

              /* Ausgabe
              [B]Das Array [[U]$var_1[/U]] hat folgenden Inhalt:[/B] Array (
                    //hier folgt dann der Inhalt des Arrays
              )*/ 

              Kommentar


              • #8
                Die Funktion ist auch ganz nett, aber ich erhalte da halt als ergebnis:
                Ich meinte auch die zusätzliche Übergabe von __LINE__ / __FILE __ - letztendlich muss das wie folgt aussehen:
                PHP-Code:
                function debug ( ) {
                  ...
                  
                $backtrace debug_backtrace ( );

                  if ( 
                file_exists $backtrace ] [ 'file' ] ) ) {
                    
                $file file $backtrace ] [ 'file' ] );
                    
                preg_match ( ..., $file $backtrace ] [ 'line' ] - ] );
                    ...
                  }

                Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                Kommentar


                • #9
                  parsekit_func_arginfo() liefert dir die variablenbezeichnungen.

                  ist aber nur in der PECL-erweiterung vorhanden und auch noch experimentell.

                  Kommentar


                  • #10
                    Die Frage ist: Wieso brauchst du die Variablennamen, wenn debug_backtrace dir Dateiname UND Zeile des Aufrufs ausgibt?
                    Du musst die Datei nur öffnen und nachschauen was übergeben wird…

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar

                    Lädt...
                    X