PHP类之间的循环依赖

时间:2014-09-16 12:55:45

标签: php profiling circular-dependency

我正在开发一个涉及执行流程剖析的项目。 我为探查器创建了一个单独的类,每次我需要分析一些东西时,我实例化探查器类的对象并开始监视。

$profiler=new Profiler($params);
$profiler->start();
//the code to be monitored//
$profiler->end();

探查器类构造函数检查参数以确定是否要记录实例ID。我使用数据库表来存储分析参数。

void _construct($params){
 $this->checkConfig($params);
}

checkConfig函数对数据库执行查询以获取配置。

现在,团队计划监视数据库查询(在我们的例子中通过查询类执行)。我尝试了executeQuery函数的类似实现:

class Query{
 public function executeQuery($queryParams){
   $profiler=new Profiler($params);
   $profiler->start();
   /*Execute query*/
   $profiler->end();
 }
}

这会产生一个有趣的循环依赖。查询类启动一个分析器,它会触发查询,查询将再次请求分析器。

有任何解决此问题的想法吗?

1 个答案:

答案 0 :(得分:1)

对于遇到类似问题的任何人,这是我为解决问题而构建的解决方法。

class Query{
   public function executeQuery($queryParams){
   static $checkProfiler;
   if(!isset($checkProfiler)){
     $profiler=new Profiler($params);
     $checkProfiler=1;
   }
   $profiler->start();
   /*Execute query*/
   $profiler->end();
   unset($checkProfiler);
 }
}

start和end方法检查探查器是否处于活动状态。不确定这是否是最好的方法,但它解决了我的问题。