牛牛在线工具

SplSubject::detach()

收录 8868 个 PHP 函数,含用途说明与用法示例。

SplSubject::detach()

从观察者列表中移除一个观察者

函数名:SplSubject::detach() 适用版本:PHP 5 >= 5.1.0, PHP 7 函数描述:SplSubject::detach() 方法用于从观察者列表中移除一个观察者。 用法:SplSubject::detach(SplObserver $observer) : void 参数: $observer: 要移除的观察者对象,必须实现 SplObserver 接口。 返回值:无返回值。 示例: class User implements SplSubject { private $observers = []; public function attach(SplObserver $observer) { $this->observers[] = $observer; } public function detach(SplObserver $observer) { $key = array_search($observer, $this->observers, true); if ($key !== false) { unset($this->observers[$key]); } } public function notify() { foreach ($this->observers as $observer) { $observer->update($this); } } } class EmailObserver implements SplObserver { public function update(SplSubject $subject) { echo "Email sent to user\n"; } } class LogObserver implements SplObserver { public function update(SplSubject $subject) { echo "User activity logged\n"; } } // 创建用户对象 $user = new User(); // 创建观察者对象 $emailObserver = new EmailObserver(); $logObserver = new LogObserver(); // 将观察者对象添加到用户对象的观察者列表中 $user->attach($emailObserver); $user->attach($logObserver); // 通知观察者 $user->notify(); // 从观察者列表中移除一个观察者 $user->detach($logObserver); // 再次通知观察者 $user->notify(); 输出结果: Email sent to user User activity logged Email sent to user 在上面的示例中,我们创建了一个用户对象 User,并实现了 SplSubject 接口。然后,我们创建了两个观察者对象 EmailObserver 和 LogObserver,并实现了 SplObserver 接口。 首先,我们将这两个观察者对象添加到用户对象的观察者列表中,然后调用 notify() 方法通知观察者。观察者收到通知后会执行相应的操作,输出结果中可以看到 "Email sent to user" 和 "User activity logged"。 接着,我们使用 detach() 方法从观察者列表中移除了一个观察者对象 LogObserver。再次调用 notify() 方法通知观察者,可以看到只有 "Email sent to user" 被输出,"User activity logged" 不再出现,说明成功移除了观察者对象。