PHP中是否有一种方法可以找出另一个对象中称为哪个方法的对象。
范例:
class Foo { public function __construct() { $bar = new Bar(); $bar->test(); } } class Bar { public function test() { } } $foo = new Foo();
有没有办法让我发现从foo对象调用了测试方法?
您可以这样使用debug_backtrace: 顺便说一句,看看手册页上的评论:有一些有用的功能和建议;-)
debug_backtrace
class Foo { public function __construct() { $bar = new Bar(); $bar->test(); } } class Bar { public function test() { $trace = debug_backtrace(); if (isset($trace[1])) { // $trace[0] is ourself // $trace[1] is our caller // and so on... var_dump($trace[1]); echo "called by {$trace[1]['class']} :: {$trace[1]['function']}"; } } } $foo = new Foo();
该var_dump会输出:
var_dump
array 'file' => string '/home/squale/developpement/tests/temp/temp.php' (length=46) 'line' => int 29 'function' => string '__construct' (length=11) 'class' => string 'Foo' (length=3) 'object' => object(Foo)[1] 'type' => string '->' (length=2) 'args' => array empty
和echo:
echo
called by Foo :: __construct
但是,尽管看起来不错,但我不确定它是否应该在您的应用程序中用作“正常事物” …似乎有些奇怪,实际上:设计良好的方法不需要知道它叫什么, 在我看来。