【问题标题】:Could I call notify() method in __construct() for SplSubject implemented class?我可以在 __construct() 中为 SplSubject 实现的类调用 notify() 方法吗?
【发布时间】:2020-11-10 17:49:20
【问题描述】:

我编写了一个实现SplSubject 的类。当我从此类构造函数中调用 notify() 方法时,它不起作用。

// SplSubject
class A implement SqlSubject
{
   public function __construct()
   {
        $this->notify('Event', $data);
   }
}

// SqlObserver

class B implements SplObserver
{
    public function update(SplSubject $subject, $event = null, $data = null)
    {
        echo "Fired " . $event . ' event';
    }
}

// Usage

$a = new A;
$b = new B;

$a->attach($b);

但是通知不起作用。如果我在另一种方法而不是构造函数中调用通知,它可以正常工作。 我的问题是,有没有办法从主题类构造函数通知观察者类?

【问题讨论】:

    标签: php observer-pattern observers


    【解决方案1】:

    这是因为$aconstructor 在附加$b 之前运行。你可以创建一个工厂:

    public static function createA() {
        $a = new A;
        $b = new B;
        $a->attach($b);
        $a->notify('Event', $data);
        return $a;
    }
    

    或者,您可以在通知之前将$b 传递给constructorattach

       public function __construct($b)
       {
            $this->attach($b);
            $this->notify('Event', $data);
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多