Anzeige

[PHP]Name von Parameter in Methode auslesen

[PHP]Name von Parameter in Methode auslesen | PSD-Tutorials.de

Erstellt von progfrog, 28.09.2008.

  1. progfrog

    progfrog programming & 3d

    1
    Dabei seit:
    13.06.2007
    Beiträge:
    288
    Geschlecht:
    männlich
    Software:
    Blender, Eclipse, Photoshop
    Kameratyp:
    Nikon D60
    [PHP]Name von Parameter in Methode auslesen
    Moin Community,
    folgendes Problem: Ich habe eine Methode die mir einen detailierten Variablen Dump zu der übergebenen Variable in nem Hübsch formatierten Fenster ausgibt. So werden zum Beispiel Arrayinhalte wunderbar übersichtlich aufgelistet. Dies ist zum entwickeln wirklich praktisch, da man zu jeder Zeit immer mal schauen kann, Mmmh was steht zu diesem Zeitpunkt im Skript eigendlich in dem und dem Array oder in diesem Integer.

    Nun würde ich der Übersichtlichkeit halber gerne, in meiner Hübsch formatierten Box auch angeben welche Variable übergeben wurde. Also der Name der als Parameter überlieferten Variable.

    PHP:
    1. <?php
    2.   /**
    3.    * Wenn ich schreibe
    4.    */  
    5.   $bla = array('blub' => 'la',
    6.                'lala' => 'foobar',
    7.                'abc'  => 127
    8.                );
    9.   //Meine Variablendump Funktion
    10.   var_dumpc($bla);
    11.  
    12.   /**
    13.    * Dann soll da stehen
    14.    */
    15.   # Es geht darum, dass genau dieses da ausgegeben wird ohne das ich das in
    16.  # meiner Methode als String übergeben muss
    17.  #                                 |  
    18.  #                                _|_
    19.  #                               /   \  
    20.  # +----------------------------------+
    21.  # | Variablen Dump der Variable $bla |
    22.  # +----------------------------------+
    23.  # | array(3) {                       |
    24.  # |   ['blub'] => (string) 'la',     |
    25.  # |   ['lala'] => (string) 'foobar', | Der ganze Kram hier funktioniert schon.
    26.  # |   ['abc']  => (int) 127          |
    27.  # | }                                |
    28.  # +----------------------------------+  
    29. ?>
    30.  
    Um diesen haufen ASCII zu verdeutlichen: :D
    Ich möchte, dass in meinem Var Dump ausgegeben wird "Variablen Dump der Variable $bla" ohne das ich dies als String übergebe.

    Ich will schreiben können:
    var_dumpc($bla);
    statt
    var_dumpc($bla, '$bla');

    Gibt es da eine möglichkeit den Namen des übergebenen Parameters auszulesen? Würde die Übersichtlichkeit echt erhöhen!

    Ich hoffe ich konnte die Problematik verdeutlichen. Wenn nein, fragt gerne nach! :rolleyes:

    Gruß progfrog
     
    #1      
  2. Guin

    Guin Nicht mehr ganz neu hier

    Dabei seit:
    18.04.2008
    Beiträge:
    186
    Geschlecht:
    männlich
    Ort:
    Lübeck
    [PHP]Name von Parameter in Methode auslesen
    AW:
    PHP:
    1. Name von Parameter in Methode auslesen[/b]
    2.  
    3. Hallo,
    4. das geht nicht.
    5.  
    6. Man könnte höchstens mit dem Doppel-Dollar spielen, aber das macht die Sache auch nicht besser.
    7.  
    8. [PHP]$variable = "var_name";
    9. $$variable = "irgendwas";
    10.  
    11. echo $variable; // var_name
    12. echo $var_name; // irgendwas
    13. echo $$variable; // irgendwas
    Das ist Geschmackssache.
    Man muss gerade bei größeren Skripten beachten, ob sich der erhöhte Rechenaufwand wegen der Bequemlichkeit lohnt.
     
    #2      
  3. Christian

    Christian verpeilt & verschallert

    Dabei seit:
    03.03.2005
    Beiträge:
    853
    Geschlecht:
    männlich
    Kameratyp:
    Canon EOS 300D
    [PHP]Name von Parameter in Methode auslesen
    AW:
    PHP:
    1. Name von Parameter in Methode auslesen[/b]
    2.  
    3. dynamische Variablen kann man nicht einfach zu debuggen benutzen, dafür müsste man in der Regel das ganze Script umschreiben. Und die Global Funktion sieht einfach nicht schön aus. (mal abgesehen davon, dass es in direktem Zusammenhang zueinander steht.)
    4. Ich selber weiß leider keine Lösung, allerdings werde ich diesen Thread aufmerkam mitverfolgen, denn dieses Problem liegt mir schon lange auf der Zunge und ich würde gerne wissen, ob es dafür nicht sogar schon vorgefertigte Funktionen in der PHP Library gibt.
     
    Zuletzt bearbeitet: 28.09.2008
    #3      
  4. progfrog

    progfrog programming & 3d

    1
    Dabei seit:
    13.06.2007
    Beiträge:
    288
    Geschlecht:
    männlich
    Software:
    Blender, Eclipse, Photoshop
    Kameratyp:
    Nikon D60
    [PHP]Name von Parameter in Methode auslesen
    AW:
    PHP:
    1. Name von Parameter in Methode auslesen[/b]
    2.  
    3. Das mit dem erhöhten Rechenaufwand ist aus dem Grund, dass ich es nur zum Debuggen nutzen will eigendlich egal. Ich habe mal bisscheng gegoogelt undwas von [URL="http://de.php.net/manual/de/function.debug-backtrace.php"]debug_backtrace();[/URL] gefunden, kapier des aber irgendwie nicht so ganz.
    4.  
    5. Falls einer von euch daraus schlau wird wäre es schön wenn er die erkenntnis teilt ;)
    6.  
    7. Das mit dem Doppeldollar hilft in dem Falle ja auch nicht weiter. :(
    8.  
    9. Trotzdem schonmal danke für die Antworten.
    10.  
    11. Gruß progfrog
     
    #4      
  5. Guin

    Guin Nicht mehr ganz neu hier

    Dabei seit:
    18.04.2008
    Beiträge:
    186
    Geschlecht:
    männlich
    Ort:
    Lübeck
    [PHP]Name von Parameter in Methode auslesen
    AW:
    PHP:
    1. Name von Parameter in Methode auslesen[/b]
    2.  
    3. Nette Funktion, aber leider steht unter "args" auch kein Variablenname. Die Indizes werden auch nur numerisch und nicht assoziativ angegeben. Genau das ist auch das Problem bei var_dump oder print_r.
    4.  
    5. Ich glaube auch nicht, dass man das so einfach herausfinden kann.
    6. An die Funktion wird nur eine Speicheradresse übergeben, an der sich der Inhalt der Variable befindet. Vom Inhalt wieder zurück auf den Variablennamen zu schließen dürfte sehr schwer sein, da es durch Zeiger auch mehrere Namen geben kann.
     
    #5      
  6. chillyorker

    chillyorker Weiß_Nix

    Dabei seit:
    04.09.2008
    Beiträge:
    29
    Geschlecht:
    männlich
    [PHP]Name von Parameter in Methode auslesen
    AW:
    PHP:
    1. Name von Parameter in Methode auslesen[/b]
    2.  
    3. Hallo,
    4.  
    5. also, damit ich Dir helfen kann, bitte ich Dich dein Problem erneut darzustellen!
    6.  
    7. Ich habe nicht wirklich verstanden, was du einmal willst und wo genau dein Problem liegt?
    8.  
    9.  
    10. Alle Variablen, die auf einer Seite vorkommen, sollen in ein Array gepackt und diese übersichtlich in einem extra Dokument aufgelistet werden? Ohne selbst dabei das Array von Seite zu Seite zu übertragen?
    11.  
    12. Ich gehe stark in der Annahme es handele sich um ein globales Array, nicht um eine lokale Variable?
    13.  
    14. Ich kann nicht viel damit anfangen und bin mir nicht sicher ob es richtig interpretiert wurde?
     
    Zuletzt bearbeitet: 29.09.2008
    #6      
  7. Guin

    Guin Nicht mehr ganz neu hier

    Dabei seit:
    18.04.2008
    Beiträge:
    186
    Geschlecht:
    männlich
    Ort:
    Lübeck
    [PHP]Name von Parameter in Methode auslesen
    AW:
    PHP:
    1. Name von Parameter in Methode auslesen[/b]
    2.  
    3. Er möchte nur den Namen der übergebenen Variablen in der Funktion wissen.
    4. Ob die Variable nun ein Array oder ein Int ist, spielt hierbei keine Rolle.
     
    #7      
  8. chillyorker

    chillyorker Weiß_Nix

    Dabei seit:
    04.09.2008
    Beiträge:
    29
    Geschlecht:
    männlich
    [PHP]Name von Parameter in Methode auslesen
    AW:
    PHP:
    1. Name von Parameter in Methode auslesen[/b]
    2.  
    3. Also, wird sowas gesucht?
    4.  
    5. 1.
    6. [url=http://de.php.net/manual/de/function.get-defined-vars.php]PHP: get_defined_vars - Manual[/url]
    7.  
    8. 2.
    9. [url=http://de.php.net/manual/de/function.array-search.php]PHP: array_search - Manual[/url]
    10.  
    11. Ist doch nichts neues? Oder habe ich es immer noch nicht richtig verstanden?
    12. Hoffe nicht!!!   :)
     
    #8      
  9. Guin

    Guin Nicht mehr ganz neu hier

    Dabei seit:
    18.04.2008
    Beiträge:
    186
    Geschlecht:
    männlich
    Ort:
    Lübeck
    [PHP]Name von Parameter in Methode auslesen
    AW:
    PHP:
    1. Name von Parameter in Methode auslesen[/b]
    2.  
    3. Nicht wirklich.
    4. Mit get_defined_vars kennt man immer noch nicht den Namen der übergebenen Variablen in der Funktion selber.
    5.  
    6. [PHP]function var_dumpc2(&$name){
    7.     echo"<pre>";
    8.     echo "get_defined_vars\n";    
    9.     $arr = get_defined_vars();
    10.     print_r($arr);  
    11.     echo"</pre>";
    12. }
    13.  
    14. $bla = array('blub' => 'la',
    15.                'lala' => 'foobar',
    16.                'abc'  => 127
    17.                );
    18.                
    19. var_dumpc2($bla); // der Variablenname "$bla" ist der Funktion var_dumpc2 unbekannt
    Wie schon geschrieben, es wird nur eine Speicheradresse übergeben. Der Name kann nicht einfach rekonstruiert werden.
     
    #9      
  10. chillyorker

    chillyorker Weiß_Nix

    Dabei seit:
    04.09.2008
    Beiträge:
    29
    Geschlecht:
    männlich
    [PHP]Name von Parameter in Methode auslesen
    AW:
    PHP:
    1. Name von Parameter in Methode auslesen[/b]
    2.  
    3. Also, da PHP nur eine Skriptsprache ist, wird es schwierig.
    4.  
    5. An die globalen Variablennamen komme ich schon! Mit Hilfe von Arrays.
    6. s
    7.  
    8. foreach($variable as $key =>$val)
    9. <br>echo 'der Schlüssel '.$key.' hat den Wert: '.$val.'';<br>
    10.  
    11. Jedoch ist mir nicht bekannt, daß PHP Reflection unterstützt, dann wäre dies kein Problem.
    12. Da ich so eine Anfrage noch nicht hatte, mache ich mich mal schlau! Mal sehen, was sich ausfindig machen lässt!
    13.  
    14. Was logisch ist, daß nur globale Variablen leßbar sind! Zwar wird mit Hilfe des Zeigers auf eine Speicheradresse im Heap gezeigt, im Speicher selbst ist ebenfalls der Name der Variablen bekannt. Daher sollte sich der Name rekonstruieren oder sich ermitteln lassen. Also, theoretisch und definitiv: Ja! Praktisch muß noch bewiesen werden!!! Bin mir aber sicher, daß das geht!
    15.  
    16. De facto in C++ und C# geht es! (Zauberwort: Reflection) Mal schauen, ob PHP auch was dafür vorgesehen hat, aber zu einem späteren Zeitpunkt, wenn etwas Ruhe einkehrt!
    17.  
    18. Um Mißverständnisse vorzubeugen:  Klar lassen sich auch lokale Variablen auslesen, jedoch erst zum Zeitpunkt der Existenz und bis zum Verlassen der Funktion! Oder sagen wir, solange diese im Stack vorgehalten werden oder vorliegen! ;-)
    19.  
    20. Also, für alle, die es noch nicht wußten:  Globale Variablen im Heap --> lokale Variablen im Stack!
     
    Zuletzt bearbeitet: 29.09.2008
    #10      
  11. chillyorker

    chillyorker Weiß_Nix

    Dabei seit:
    04.09.2008
    Beiträge:
    29
    Geschlecht:
    männlich
    [PHP]Name von Parameter in Methode auslesen
    AW:
    PHP:
    1. Name von Parameter in Methode auslesen[/b]
    2.  
    3. Noch eine Ergänzung:  
    4.  
    5. Guin, was für eine Ausgabe erhälst du, wenn du den Code laufen lässt?
    6.  
    7. Warum sollte $bla nicht bekannt sein? Bei mir funz, habe es gerade getestet!
    8.  
    9. Warum übergibst du oben in der Funktion eine Speicheradresse? Ich dachte der Variablenname ist gesucht? Übergibst du eine Speicheradresse, bekommst du auch nur die Anfangsadresse im Speicher, wo die Variable zu finden ist, zurück!
     
    #11      
  12. Guin

    Guin Nicht mehr ganz neu hier

    Dabei seit:
    18.04.2008
    Beiträge:
    186
    Geschlecht:
    männlich
    Ort:
    Lübeck
    [PHP]Name von Parameter in Methode auslesen
    AW:
    PHP:
    1. Name von Parameter in Methode auslesen[/b]
    2.  
    3. Wird ja noch ne interessante Diskussion :D
    4. [QUOTE]Warum übergibst du oben in der Funktion eine Speicheradresse? Ich dachte der Variablenname ist gesucht?
    5. [/QUOTE]
    6. Das war von progfrog so gefordert. Der Inhalt der Variablen soll ausgegeben werden und zugleich der Name dieser Variablen.
    7.  
    8. [QUOTE]Ich will schreiben können:
    9. var_dumpc($bla);
    10. statt
    11. var_dumpc($bla, '$bla');
    12. [/QUOTE]
    13. Sinn oder Unsinn soll ja nicht zur Diskussion stehen :)
    14.  
    15. [QUOTE]Guin, was für eine Ausgabe erhälst du, wenn du den Code laufen lässt?[/QUOTE]
    16. (
    17.     [name] => Array
    18.         (
    19.             [blub] => la
    20.             [lala] => foobar
    21.             [abc] => 127
    22.         )
    23.  
    24. )[/QUOTE]
    25. In dieser Ausgabe taucht der Variablenname "$bla" nirgends auf.
    26.  
    27. Wenn ich mich nun nicht täusche:
    28. [I]function var_dumpc2(&$name){[/I]
    29. * Parameter wird als Referenz übergeben
    30. [I]function var_dumpc2($name){[/I]
    31. * Parameter wird als Kopie übergeben.
    32. (was der Optimierer daraus nun wirklich macht, ist eine andere Sache)
    33.  
    34. Wenn der Parameter als Kopie übergeben wird, ist es quasi unmöglich den ursprünglichen Variablennamen zu bekommen, da eben eine Kopie angelegt wurde.
    35. Wenn der Parameter als Referenz übergeben wird, hat man nur die Speicheradresse. Jetzt müsste rückwärst die entsprechenden Tabellen (welche das sind ist für die Betrachtung erst mal egal) durchsucht werden, bis die Speicheradresse gefunden wurde. Dort steht dann der Variablenname.
    36. Da aber durchaus mehrere Namen auf den gleichen Speicher zeigen können, ist das Ergebnis nicht eindeutig. (n:1 Beziehung und nicht 1:1 Beziehung).
    37.  
    38. @chillyorker: ich weiss nicht, ob wir von der selben Sachen reden/schreiben.
    39. Der Variablenname im Parameter im Funktionsaufruf soll in der Funktion ebenfalls bekannt sein.
    40. Am einfachsten geht das natürlich mit:
    41. var_dumpc($bla, '$bla'); // wie oben schon geschrieben, aber eben nicht gewollt
    42.  
    43. @progfrog: melde dich mal wieder :D
     
    #12      
  13. chillyorker

    chillyorker Weiß_Nix

    Dabei seit:
    04.09.2008
    Beiträge:
    29
    Geschlecht:
    männlich
    [PHP]Name von Parameter in Methode auslesen
    AW:
    PHP:
    1. Name von Parameter in Methode auslesen[/b]
    2.  
    3. Schwierig! Durch das & wird keine Kopie übergeben! Sondern ausschließlich die Speicheradresse. Die Position, wo der Inhalt der Variable geschrieben wird und zwar nur die Anfangsadresse! Jedoch greifen auch andere Mechanismen hier ein, so daß auch eine Referenz auf diese Weise übergeben werden kann. Immer abhängig vom kompletten Code!
    4.  
    5. Beim anderen wird keine Kopie erzeugt! Das wäre ja der Hammer! Eine Referenz der Variable. Änderst du den Wert darin, wird auch der globale Wert verändert!
    6.  
    7. Also, man muß schon den kompletten Code kennen, um zu sehen, ob tatsächlich eine Kopie, eine Referenz, lokal, global oder eine Speicheradresse vorliegt!
    8.  
    9. Das was Progfrog meint, geht! Dazu muß man die Funktion überladen. Man kann auch eine Extension dafür schreiben!
    10.  
    11. Das mache ich ein ander mal, außerdem hat er bereits eine Lösung und darüber hinaus:
    12.  Die Bezahlung ist ziemlich mau hier!!! :D
    13.  
    14. So ein Aufwand, was man von vornherein mit einem UML-Diagramm lösen kann oder einer einheitlichen Programmierung!
    15.  
    16. Jetzt fangen wir an kleine Codes zu schreiben. Lesen die Speichertabellen des Arbeitsspeicher aus!
    17.  
    18. Hallelulia, wo kommen wir nur hin!
     
    Zuletzt bearbeitet: 29.09.2008
    #13      
  14. Guin

    Guin Nicht mehr ganz neu hier

    Dabei seit:
    18.04.2008
    Beiträge:
    186
    Geschlecht:
    männlich
    Ort:
    Lübeck
    [PHP]Name von Parameter in Methode auslesen
    AW:
    PHP:
    1. Name von Parameter in Methode auslesen[/b]
    2.  
    3. Ich sag doch, es geht nicht.
     
    #14      
  15. progfrog

    progfrog programming & 3d

    1
    Dabei seit:
    13.06.2007
    Beiträge:
    288
    Geschlecht:
    männlich
    Software:
    Blender, Eclipse, Photoshop
    Kameratyp:
    Nikon D60
    [PHP]Name von Parameter in Methode auslesen
    AW:
    PHP:
    1. Name von Parameter in Methode auslesen[/b]
    2.  
    3. Hui hier, scheints sich ja eine rege Diskussion um meine kleine Frage gebildet zu haben. Nun ich muss sagen, dass ich zwar in der Lage bin mit PHP recht fortgeschrittene Skripte zu schreiben, aber wenn es dann hier darum geht bestimmte Speicheradressen im Arbeitsspeicher des Servers auszuwerten bin ich wirklich mit meinem Latein am Ende.
    4. Scheint ja nicht ohne weiteres möglich zu sein. Ich hatte gehofft, dass es vieleicht eine einfache Funktion gibt, die die Übergebenen Namen zurückgibt oder so. :(
    5.  
    6. Nun ich denke ich werde es dann dabei belassen den Inhalt der Variable auszugeben und im Falle indem es von Bedeutung ist, dann mit nem Optionalen Parameter deren Namen per Hand übergeben.
    7.  
    8. Vielen Dank für eure Mühe. :)
    9.  
    10. Gruß progfrog
     
    #15      
x
×
×
teststefan