我有一系列使用大量方法重载的继承类,我需要一种方法来找出在调用特定方法时正在使用哪个类。
简单的例子:
class child extends parent
public function _process()
{
$this->_otherrun();
}
public function _run()
class parent extends grandparent
public function _run()
public function _otherrun()
{
// I need to find out which class the version of _run is called in
$this->_run();
}
这个例子与我正在浏览的内容相比非常简单,所以我需要一种方法来查看处理哪个类function _run
。这是否可能?
这样的事情:
get_class(array($this, 'run'));
答案 0 :(得分:0)
您可以使用get_called_class()
功能或debug_backtrace()
功能:
get_called_class()
示例:
class foo {
static public function test() {
var_dump(get_called_class());
}
}
debug_backtrace()
示例(代码部分):
<?php
// filename: /tmp/a.php
function a_test($str)
{
echo "\nHi: $str";
var_dump(debug_backtrace());
}
a_test('friend');
?>
<?php
// filename: /tmp/b.php
include_once '/tmp/a.php';
?>
上述代码的结果:
Hi: friend
array(2) {
[0]=>
array(4) {
["file"] => string(10) "/tmp/a.php"
["line"] => int(10)
["function"] => string(6) "a_test"
["args"]=>
array(1) {
[0] => &string(6) "friend"
}
}
[1]=>
array(4) {
["file"] => string(10) "/tmp/b.php"
["line"] => int(2)
["args"] =>
array(1) {
[0] => string(10) "/tmp/a.php"
}
["function"] => string(12) "include_once"
}
}
另外,使用搜索。结果之一:Find out which class called a method in another class
更新(评论):使用debug_backtrace()
功能。
在你的情况下:
class parent extends grandparent
public function _run()
public function _otherrun()
{
// I need to find out which class the version of _run is called in
$this->_run();
var_dump(debug_backtrace());
}