我有一些课程:
class A
{
private $_method;
public function __construct()
{
$this->_method = new B();
}
public function demo()
{
$this->_method->getNameFnc();
}
}
class B
{
public function getNameFnc()
{
echo __METHOD__;
}
}
我正在尝试获取class B
类的函数名称,但我希望函数getNameFnc
返回'demo'。如何在getNameFnc
的函数class B
中获取名称“demo”?
答案 0 :(得分:1)
好吧,如果你真的想在不传递参数*的情况下这样做,你可以使用debug_backtrace():
public function getNameFnc()
{
$backtrace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 2);
echo $backtrace[1]['function'];
}
*这将是推荐的方式,尽管人们永远不需要知道之前调用过哪个函数。如果你的应用程序依赖于这个事实,你就会遇到一个重大的设计缺陷。
答案 1 :(得分:1)
您需要使用debug_backtrace
来获取该信息。
我没有测试下面的代码,但我认为这应该会为您提供所需的信息:
$callers = debug_backtrace();
echo $callers[1]['function'];
答案 2 :(得分:0)
为什么不通过它?
class A
{
private $_method;
public function __construct()
{
$this->_method = new B();
}
public function demo()
{
$this->_method->getNameFnc(__METHOD__);
}
}
class B
{
public function getNameFnc($method)
{
echo $method;
}
}
如果您不想要班级名称,请使用__FUNCTION__
。