php - 我可以在 __construct() 中为 SplSubject 实现的类调用 notify() 方法吗?
问题描述
我写了一个实现的类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);
但是通知没有用。如果我在另一种方法而不是构造函数中调用通知,它可以正常工作。我的问题是,有没有办法从主题类构造函数通知观察者类?
解决方案
这是因为您的constructor
for$a
运行之前$b
已附加。你可以创建一个工厂:
public static function createA() {
$a = new A;
$b = new B;
$a->attach($b);
$a->notify('Event', $data);
return $a;
}
或者,您可以在通知之前传递$b
给constructor
and it:attach
public function __construct($b)
{
$this->attach($b);
$this->notify('Event', $data);
}