ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
346
346
EMPFEHLEN
-
Hallo,
wie kann ich innerhalb einer Klasse den Namen der aufrufenden Funktion (außerhalb der Klasse) ermitteln.
Ich erkläre es am Besten an diesem Beispiel:
Über __METHOD__ bekomme ich den eigenen Funktionsnamen heraus. (Es sollte allerdings "Aufrufer" rauskommen).PHP-Code:<?php
class clTest1
{
function MacheWas()
{
echo "wer hat mich aufgerufen?<br>";
echo __METHOD__;
}
}
class clTest2
{
// Ich rufe
function Aufrufer()
{
$cTest1 = new clTest1();
$cTest1->MacheWas();
}
}
$cTest2 = new clTest2();
$cTest2->Aufrufer();
?>
Gibt es eine Möglichkeit den aufrufenden Funktionsnamen herauszufinden, ohne __METHOD__ per Parameter zu übergeben?
Also direkt in der Funktion "MacheWas" der Klasse "clTest1".
-
17.11.11 17:36 #2
Hallo Lefti1,
das müsste mir der Funktion debug_backtrace() gehen, dir die vorhergehenden Aufrufe ausgibt.
Wenn du in der Funktion MacheWas() debug_backtrace() einfügst und ausgibst, bekommst du folgende Ausgabe:
PHP-Code:// Ausgeführt auf codepad.org: http://codepad.org/T2LHViWm
function MacheWas()
{
$backtrace = debug_backtrace();
var_dump($backtrace);
}
Also steht in $backtrace[1]["function"] die Funktion, die die aktuelle Funktion aufgerufen hat!Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
array(2) { [0]=> array(7) { ["file"]=> string(6) "/t.php" ["line"]=> int(19) ["function"]=> string(8) "MacheWas" ["class"]=> string(7) "clTest1" ["object"]=> object(clTest1)#2 (0) { } ["type"]=> string(2) "->" ["args"]=> array(0) { } } [1]=> array(7) { ["file"]=> string(6) "/t.php" ["line"]=> int(25) ["function"]=> string(8) "Aufrufer" ["class"]=> string(7) "clTest2" ["object"]=> object(clTest2)#1 (0) { } ["type"]=> string(2) "->" ["args"]=> array(0) { } } }
Wenn du PHP 5.4.0 hast, würde ich noch das ein Limit angeben:PHP-Code:function MacheWas()
{
$backtrace = debug_backtrace();
echo 'Mich hat die Funktion "' . $backtrace[1]['function'] . '()" aufgerufen!';
}
PHP-Code:$backtrace = debug_backtrace( DEBUG_BACKTRACE_PROVIDE_OBJECT, 2 );
mfg ComFreek
Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
[PHP] Überprüfen, ob Website erreichbar • Sicherheit in PHP-Codes schaffen • Google Chrome-Extension für tutorials.de • json_compress()
-
17.11.11 20:05 #3
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Wenn du die PECL-Extension APD installiert hast, kannst du auch die Funktion apd_callstack() verwenden.
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Perfekt,
genau das was ich gesucht habe.
Vielen Dank ComFreek.
die PECL-Extension hab ich nicht installiert.
Danke dir trotzdem saftmeister.
Ähnliche Themen
-
JS-Funktionsnamen mehrfach
Von FrankWST im Forum Javascript & AjaxAntworten: 6Letzter Beitrag: 29.05.10, 10:23 -
Frage zu Funktionsnamen
Von -André- im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 23.04.10, 23:21 -
Wan IP ermitteln
Von Xo-mate im Forum .NET Web und KommunikationAntworten: 2Letzter Beitrag: 31.07.06, 09:36 -
ID ermitteln
Von Bencher im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 22.06.06, 10:26 -
IP ermitteln
Von Sircoly im Forum C/C++Antworten: 1Letzter Beitrag: 01.05.06, 22:00





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren