编辑代码

<?php

// 观察者接口
interface Observer
{
    public function update($state);
}

// 被观察者接口
interface Observable
{
    public function attach(Observer $observer);
    public function detach(Observer $observer);
    public function notify();
}

// 观察者类
class MyObserver implements Observer
{
    private $name;

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

    public function update($state)
    {
        echo $this->name . ' received state: ' . $state . "\n";
    }
}

// 被观察者类
class MySubject implements Observable
{
    private $observers = [];
    private $state;

    public function attach(Observer $observer)
    {
        array_push($this->observers, $observer);
    }

    // 移除观察者
    public function detach(Observer $observer)
    {
        if (($index = array_search($observer, $this->observers, true)) !== false) {
            unset($this->observers[$index]);
        }
    }

    // 假设状态发生变化时会通知观察者
    public function notify()
    {
        foreach ($this->observers as $observer) {
            $observer->update($this->state);
        }
    }

    public function setState($state)
    {
        $this->state = $state;
        $this->notify();
    }
}

// 使用示例
$subject = new MySubject();
$observerA = new MyObserver('Observer A');
$observerB = new MyObserver('Observer B');
$subject->attach($observerA);
$subject->attach($observerB);
$subject->setState('Ready');