|
|
|
|
|
|
|||||||
| PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen |
|
|
|
LinkBack | Themen-Optionen | Thema bewerten |
|
|
#1 (permalink) |
|
Gast
Beiträge: n/a
|
Hi,
ich bin neu hier und erstmal "Hallo" folgendes Problem: Ich habe mehrere Funktionen für die ich mitloggen will, was sie Parameter etc. bekommen haben. Ich würde nun gerne eine Art Referenz der Funktion in der ich gerade bin an die Funktion geben, die das loggen macht. bis jetzt habe ich es so $numArgs = func_num_args(); $argList = func_get_args(); // now call the wrapped soap function $h_checkBankResult = $this->callWrapper('checkBank',$o_soap,$params,$numArgs, $argList); in der callWrapper lese ich dann alles aus etc. ich würde aber gerne auf die zeilen $numArgs = func_num_args(); $argList = func_get_args(); verzichten und eine art referenz der funktion übergeben in der ich gerade bin, so dass ich bei Änderrungen nicht alle Funktionen anfassen muss. Die funktion callWrapper hätte dann die Möglichkeit genauso mit den funktionen $numArgs = func_num_args(); $argList = func_get_args(); auf die ursprüngliche funktion zuzugreifen. so in der Art // now call the wrapped soap function $h_checkBankResult = $this->callWrapper('checkBank',$o_soap,$params,$numArgs, $argList,&$thisFunction); Kann mir da jemand helfen oder geht das generell nicht ? ciao und danke Marcel |
|
|
|
|
|
PHP Code Flüsterer
Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten
|
|
|
|
#2 (permalink) |
|
Gast
Beiträge: n/a
|
Also du willst von jeder Funktion die übergebenden Parameter loggen, aber nicht jede Funktion so verändern das die deine Logging Funktion aufruft, da zuviel Code ? Also ne Referenz gibt es (wahrscheinlich) nicht in PHP, man kann zwar auf die Referenz von Variablen in PHP zugreifen, aber auf die Funktion ... ich glaube nicht. Du könntest aber alle Funktionsaufrufe an eine Logger Funktion als String übergeben, und diesen nach den Loggen mit nem Eval ausführen:
PHP-Code:
|
|
|
|
#3 (permalink) |
|
Erfahrener Benutzer
Registriert seit: 18.07.2004
Beiträge: 2.162
![]() |
...und wie willst du so ein Objekt an die Funktion übergeben etc.? Du müsstest schon die Ausgabe von get_args() serialisieren, aber dann stehst du vor dem nächsten Problem: Als Referezen übergebene Parameter und das kannst du so nicht lösen.
Ehrlich gesagt weiß ich auch nicht, ob es das ist, was Marcel meinte. Du hast ein Objekt und rufst eine Methode dieses auf. Diese Methode ruft nun einen Wrapper auf (in dem Fall eine Methode des selben Objektes), der den Aufruf loggt und die Parameter an eine bestimmte Funktion weitergibt, richtig? Auch hier wirst du an den Paremetern scheitern, die du als Referenzen übergibst, denn du hast aus der Funktion heraus ja keine Möglichkeit festzustellen, ob der Parameter als Referenz übergeben wurde oder nicht. Wieso überhaupt reicht es nicht, der logging-Funktion die Ausgabe von get_args() zu übergeben? Den Funktionsnamen kannst du von dort aus dann mit debug_backtrace() auslesen und schon hast du alle Infos oder wo ist das Problem? Basti
__________________
www.bastian-fenske.de |
|
|
|
|
|
#4 (permalink) |
|
Gast
Beiträge: n/a
|
Hi,
erstmal danke für eure Antworten. Ich meinte das so: Um nicht in jeder Funktion die Parameter die sie bekommen hat zu ermitteln und dies in jeder Funktion zu tun, würde ich gerne ein Wrapper funktion bauen, welche als argument den Namen der eingentlichen Funktion hat. Die Wrapper funktion kann soll dann auf die Funktion aus der sie aufgerufen wurde zugreifen und deren Parameter ermitteln und loggen. Also anstatt in jeder Funtion die ich mal aufrufe numArgs = func_num_args(); $argList = func_get_args(); zu schreiben und diese dann zusätzliche als parameter an die wrapper funktion zu übergeben, wie hier // now call the wrapped soap function $h_checkBankResult = $this->callWrapper('checkBank',$o_soap,$params,$numArgs,$argList); würde ich einfach gerne folgendes schreiben: numArgs = func_num_args(); $argList = func_get_args(); // now call the wrapped soap function $h_checkBankResult = $this->callWrapper('checkBank',$o_soap,$params,&$THIS_OD ER_SO); $numArgs,$argList fehlen in diesem Aufruf, da ich sie im Wrapper holen will. Im Wrapper würde ich dann soetwas schreiben wollen function callWrapper('eigentlicheFunktion',$o_soap,$params, $DIE_REF){ und jetzt hier numArgs = func_num_args($DIE_REF); $argList = func_get_args($DIE_REF); } Ich hoffe, jetzt wird es klarer danke schonmal Marcel [/b] |
|
|
|
#5 (permalink) |
|
Erfahrener Benutzer
Registriert seit: 18.07.2004
Beiträge: 2.162
![]() |
...ich denke, die Verwendung des Begriffes 'Wrapper' sogt einfach für Misverständnisse, denn in der Regel rufst du den den Wrapper ja 'von Außen' auf und der greift dann auf die jeweilige Implementierung der Funktionalitäten zurück.
Wie auch immer, ich kann es nur nochmal wiederholen: Es gibt keine Referenzen auf Funktionen und das übergeben der Parameter via func_get_args() oder der Methode von 'GiggyGsk' scheitert an der fehlenden Möglichkier, Referenzen zu übergeben bzw. bei 'GiggyGsk' (zumindest in der Implementierung) eben auch an Arrays und Objekten als Parameter. Was willst du denn noch wissen? Basti
__________________
www.bastian-fenske.de |
|
|
|
|
|
#7 (permalink) |
|
Erfahrener Benutzer
Registriert seit: 18.07.2004
Beiträge: 2.162
![]() |
Ich stand kürzlich auch vor dem Problem und habs dann aufgegeben. Wenn du eine Lösung hast, dann poste mal. Ich denke aber, es scheitert einfach an er Unmöglichkiet, eine Referenz auf NULL zu bekommen.
Hier hab ich mal ein wenig rumgespielt: PHP-Code:
__________________
www.bastian-fenske.de |
|
|
|
|
| Themen-Optionen | |
| Thema bewerten | |
|
|

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.