一尘不染

找出哪个类别在另一个类别中称为方法

php

PHP中是否有一种方法可以找出另一个对象中称为哪个方法的对象。

范例:

class Foo
{
  public function __construct()
  {
    $bar = new Bar();
    $bar->test();
  }
}

class Bar
{
  public function test()
  {
  }
}
$foo = new Foo();

有没有办法让我发现从foo对象调用了测试方法?


阅读 238

收藏
2020-05-29

共1个答案

一尘不染

您可以这样使用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会输出:

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

called by Foo :: __construct

但是,尽管看起来不错,但我不确定它是否应该在您的应用程序中用作“正常事物” …似乎有些奇怪,实际上:设计良好的方法不需要知道它叫什么, 在我看来。

2020-05-29