php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.07.2004, 15:42   #1 (permalink)
Gast
 
Beiträge: n/a
Standard Referenz auf Funktion übergeben

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
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.07.2004, 00:24   #2 (permalink)
Gast
 
Beiträge: n/a
Standard

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:
<?

function Log($Func) {
   
/* Logging .... */

  
eval($Func);
}

function 
FuncDummy($Parm1) {
  
/* Do nothing */
}

Log("Funcdummy(Test);");

?>
  Mit Zitat antworten
Alt 18.07.2004, 12:47   #3 (permalink)
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
Basti
Standard

...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
Basti ist offline   Mit Zitat antworten
Alt 19.07.2004, 13:41   #4 (permalink)
Gast
 
Beiträge: n/a
Standard ich meinte es so

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]
  Mit Zitat antworten
Alt 19.07.2004, 14:21   #5 (permalink)
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
Basti
Standard

...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
Basti ist offline   Mit Zitat antworten
Alt 19.07.2004, 15:44   #6 (permalink)
Gast
 
Beiträge: n/a
Standard danke euch beiden

danke,

reicht mir als Antwort. Vielleicht finde ich ja noch ein Möglichkeit.

danke

Marcel
  Mit Zitat antworten
Alt 19.07.2004, 18:16   #7 (permalink)
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
Basti
Standard

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:
<?php
function foo($args = array())
{
    
$backtrace debug_backtrace();
    echo 
"Die Funktion {$backtrace[1]['function']} wurde mit folgenden Parametern aufgerufen:<pre>";
    
var_dump($args);
    echo 
'</pre>';
}

function 
bar() 
{
    
foo(func_get_args());
}

function 
baz($test)
{
    
foo(func_get_args());
}

echo 
'<h1>Aufruf mit "normalen" Parametern aus der einen Funktion</h1>';
bar ('x', array('y''z'), dir('.'));

echo 
'<h1>...und aus der anderen Funktion heraus</h1>';
baz (0falseNULL);


echo 
'<h1>Passing by Reference bei fest definierter Anzahl der Argumente</h1>';

function 
foo1 (&$arg)
{
    
$arg 42;    


function 
bar1 (&$arg)
{
    
foo1($arg);
}

$test 17;
bar1($test);
echo 
"Wert wird erfolgreich geaendert: $test";

echo 
'<h1>Passing by Reference bei variabler Anzahl der Argumente</h1>';

function 
foo2 (&$args)
{
    
$args[0] = 42;    


function 
bar2 (&$arg1)
{
    
foo2(func_get_args());
}

$test 17;
bar2($test);
echo 
"Hier gehen die Referenzen natuerlich floeten: $test";

echo 
'<h1>Workaround</h1>';
echo 
'kann natuerlich nicht gehen, da du keine Referenz auf NULL haben kannst';

function 
foo3 (&$arg1, &$arg2, &$arg3, &$argn)
{
    
$arg1 42;
}


function 
bar3 (&$arg)
{
    
foo3($arg);
}

$test 17;
bar3($test);
?>
__________________
www.bastian-fenske.de
Basti ist offline   Mit Zitat antworten
Alt 20.07.2004, 09:51   #8 (permalink)
Gast
 
Beiträge: n/a
Standard danke für den Code, werde ihn probieren n.T.

danke

Marcel
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
JS: Einführung - Javascript im Schichtenmodell nikosch Tutorials 4 11.04.2009 17:06
Rekursive Funktion bricht ab... duras666 PHP Tipps 2008 9 28.04.2008 11:36
gpc_quotes funktion: verbesserungsvorschläge? Promaetheus PHP Tipps 2007 10 12.08.2007 19:29
Komplexe Funktion: +Übersichtlichkeit, -Performance Jacks Rache PHP Tipps 2006 3 07.06.2006 14:22
funktion soll funktion aufrufen, welche datei einbindet PHP Tipps 2006 12 13.03.2006 18:31
aus einer funktion auf funktion anderer klasse zugreifen seejay PHP Tipps 2006 3 05.01.2006 10:37
PHP-GTK Tutorial Beitragsarchiv 9 02.11.2005 21:07
[Erledigt] Rückgabewert einer rekrusiven Funktion PHP-Fortgeschrittene 7 06.10.2005 18:44
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
In einer Funktion auf eine Funktion der Klasse zugreifen phpbeginner PHP Tipps 2005-2 2 28.07.2005 00:30
Funktion in einer Funktion aufrufen? PHP Tipps 2005-2 11 14.06.2005 15:14
[Erledigt] Array-Übergabe in Funktion PHP Tipps 2005 1 08.05.2005 21:05
funktion in klasse ruft funktion in anderer klasse auf phpfortgeschrittener PHP Tipps 2005 6 17.04.2005 17:47
[Erledigt] Wie kann ich beliebig viele Werte an eine Funktion übergeben PHP Tipps 2005 11 25.01.2005 10:44
[Erledigt] sql syntax error in funktion, kann aber nix finden :( PHP Tipps 2004 10 20.07.2004 19:19

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php function reference, php referenz übergeben, php funktion übergeben, php referenz auf funktion, php function Übergeben, javascript referenz übergeben, php referenzen übergeben, php funktionen übergeben, php funktion referenz, php referenz funktion, referenz auf funktion, php funktion string übergeben, php function übergabe, php string an funktion übergeben, vorteil von daten als referenz funktionen, referenz funktion, php funktionen übergabe, php funktionen referenz, php funktion an funktion übergeben, function übergeben php

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:47 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.