tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
346
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Lefti1 Lefti1 ist offline Rookie
    Registriert seit
    Mar 2011
    Beiträge
    5
    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:
    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();
        
    ?>
    Über __METHOD__ bekomme ich den eigenen Funktionsnamen heraus. (Es sollte allerdings "Aufrufer" rauskommen).
    Gibt es eine Möglichkeit den aufrufenden Funktionsnamen herauszufinden, ohne __METHOD__ per Parameter zu übergeben?
    Also direkt in der Funktion "MacheWas" der Klasse "clTest1".
     

  2. #2
    Avatar von ComFreek
    ComFreek ComFreek ist gerade online [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.364
    Blog-Einträge
    4
    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);

    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) {
        }
      }
    }
    Also steht in $backtrace[1]["function"] die Funktion, die die aktuelle Funktion aufgerufen hat!
    PHP-Code:
    function MacheWas()
    {
      
    $backtrace debug_backtrace();
      echo 
    'Mich hat die Funktion "'  .  $backtrace[1]['function']  .  '()" aufgerufen!';

    Wenn du PHP 5.4.0 hast, würde ich noch das ein Limit angeben:
    PHP-Code:
    $backtrace debug_backtraceDEBUG_BACKTRACE_PROVIDE_OBJECT); 
     
    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 erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  3. #3
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    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 ;-)

  4. #4
    Lefti1 Lefti1 ist offline Rookie
    Registriert seit
    Mar 2011
    Beiträge
    5
    Perfekt,
    genau das was ich gesucht habe.

    Vielen Dank ComFreek.


    die PECL-Extension hab ich nicht installiert.
    Danke dir trotzdem saftmeister.
     

Ähnliche Themen

  1. JS-Funktionsnamen mehrfach
    Von FrankWST im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 29.05.10, 10:23
  2. Frage zu Funktionsnamen
    Von -André- im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 23.04.10, 23:21
  3. Wan IP ermitteln
    Von Xo-mate im Forum .NET Web und Kommunikation
    Antworten: 2
    Letzter Beitrag: 31.07.06, 09:36
  4. ID ermitteln
    Von Bencher im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 22.06.06, 10:26
  5. IP ermitteln
    Von Sircoly im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 01.05.06, 22:00