2010-11-02 1 views
2

Можно создать дубликат:
Caller function in PHP 5?PHP, так или иначе, чтобы узнать, какой метод/класс называется другим?

У меня есть несколько объектов, которые расширяют друг друга, и вызывает различные вспомогательные методы. Мне интересно, есть ли способ определить, какой метод называется другим. вот пример:

class Foo { 
    function whereAmICalled() { 
     $calling_method = '' //would like to get func_caller here when code is executed 
     $calling_class = '' //would like to get 'Bar' here when code is executed 
    } 
} 

class Bar extends Foo { 
    function func_caller() { 
     $this->whereAmIcalled(); 
    } 
} 

$bar = New Bar(); 
$bar->func_caller(); 
+0

Что-то вроде debug_backtrace()? Я не совсем понимаю, что вы хотите сделать именно так. –

+4

Дублируйте, действительно, с замечанием о том, что эта информация обычно указывает на плохой дизайн, почти фундаментальный принцип OO - вам не нужно и не заботится о том, какая функция/класс вызывает текущий метод. – Wrikken

+0

Если вам нужно знать вызывающего абонента, тогда передайте эту информацию вызываемому абоненту, а не позвольте вызываемому абоненту пропустить через отладочную обратную линию. – Gordon

ответ

2

Вы можете использовать debug_backtrace так:

class Foo { 
    function whereAmICalled() { 
    $trace = debug_backtrace(); 
    echo "Caller class: {$trace[1]['class']}, method: {$trace[1]['function']}"; 
    } 
} 

class Bar extends Foo { 
    function func_caller() { 
     $this->whereAmIcalled(); 
    } 
} 

Вы можете проверить выходные данные с помощью var_dump:

$trace = debug_backtrace(); 
var_dump($trace); 
Смежные вопросы