PHP类之间的循环依赖关系


Circular dependency between classes PHP

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

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

探查器类构造函数检查params,以确定是否要记录实例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();
 }
}

这产生了一个有趣的循环依赖关系。查询类启动探查器,探查器会激发一个查询,查询将再次请求探查器。

有什么解决办法吗?

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

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方法检查探查器是否处于活动状态。不确定这是否是最好的方法,但它解决了我的问题。