静态类和静态类生成的实例之间的循环依赖关系

时间:2017-02-28 23:32:09

标签: php

我用PHP编写代码并有两个类:Producer和Member。 Producer是静态类,用于生成和缓存成员实例。成员可以使用另一个成员实例,但为了获得它,需要调用Producer来获取它。

class Producer
  {
    static private $members = array();

    static function getMember($name)
      {
         if (!isset(self::$members[$name]))
           {
             self::$members[$name] = new Member($name);
           }
         return self::$members[$name];
      }

    static function getFriend($myname, $friendname)
      {
         // Disregard $myname at the moment as irrelevant
         return self::$members[$friendname];
      }
  }

class Member
  {
    private $myname;

    public function __construct($name)
      {
         $this->myname = $name;
      }

    public function getFriend($name)
      {
         return Producer::getFriend($this->myname, $name);
      }

    public function work()
      {
        $friend = $this->getFriend($name);
        $friend->doSomething();
      }
  }

显然这是循环依赖,需要消除。在这种情况下使用依赖注入会很好,只是在实例化时将Producer的实例传递给Member,但Producer是静态类。

处理此类问题的最佳方法是什么?介绍单例MembersCache并将其传递给每个成员?对我来说似乎很笨拙

0 个答案:

没有答案