在PHP中,是否有可能打印出所有被调用的类和函数?

3
如果我有这个例子:
class A {
    public function test(){
        echo 'a';
    }
}
class B {
    public function test(){
        echo 'b;
    }
}
class C {
    public function test(){
        (new A())->test();
    }
}

(new A())->test();
(new B())->test();
(new C())->test();

我希望获得包含所有调用函数和类的数组,例如:

[
    'A' => [
        'function' => 'test',
        'count'    => 2,
        'miliseconds' => 20,
        'miliseconds_each' => [5, 15],
    ],
    'B' => [
        'function' => 'test',
        'count'    => 1,
        'miliseconds' => 25,
        'miliseconds_each' => [25],
    ],
    'C' => [
        'function' => 'test',
        'count'    => 1,
        'miliseconds' => 30,
        'miliseconds_each' => [30],
    ]
]

注意:我希望得到整个框架的解决方案,而不仅仅是这个小示例的糟糕解决方法。


你是在询问如何对脚本进行性能分析吗? - TimBrownlaw
我知道很多脚本分析的方法,我想问的是上面的具体内容是什么... - fico7489
可能是重复问题:PHP脚本性能分析的最简单方式 - Progman
如果你知道很多脚本分析的方法... 那么你能否将这些信息格式化成你上面所要求的方式呢? - TimBrownlaw
1个回答

0

我会这样做,创建一个基类并继承以更新你的分析。

<?php
  class Base{
    static $data;
    public static function analysis(){
      return this::data;
    }
    function update($function){
        if(isset(Base::$data[$function])){
          Base::$data[$function] = ['count'=>Base::$data[$function]['count']+1,'function'=>'test'];
        }else{
          Base::$data[$function] = ['count'=>1,'function'=>'test'];
        }
    }
  }
  class A extends Base{
      public function test(){
        $this->update('a');
          echo 'a';
      }
  }
  class B extends Base{
      public function test(){
      $this->update('b');
          echo 'b';
      }
  }
  class C extends Base{
      public function test(){
          (new A())->test();
      }
  }

  (new A())->test();
  (new B())->test();
  (new C())->test();

  print_r(Base::$data);
?>

我知道你可以更新代码以获取 milisecondsmiliseconds_each

在线演示:https://eval.in/879998


谢谢你的尝试,但我想要一个优雅的解决方案来处理整个大型系统,比如库或框架,我不想去修改我的类... - fico7489

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接