//观察者模式
class Observer
{
public $observers;
public function setState()
{
$this->notifyAll();
}
private function notifyAll()
{
if(empty($this->observers))return null;
foreach ($this->observers as $key => $value) {
$className = $key;
$funcName = $value;
if (method_exists($className, $funcName))
{
call_user_func(array($className,$funcName));
}
}
}
}
class BinaryObserver extends Observer
{
public $subject;
function __construct($subject)
{
$this->subject = $subject;
$this->subject->observers['BinaryObserver'] = 'update';
}
protected function update()
{
echo "Binary String: <br />";
}
}
class OctalObserver extends Observer
{
public $subject;
function __construct($subject)
{
$this->subject = $subject;
$this->subject->observers['OctalObserver'] = 'update';
//var_dump($this->subject->observers);
}
protected function update()
{
echo "Octal String: <br />";
}
}
$subject = new Observer();
new BinaryObserver($subject);
new OctalObserver($subject);
$subject->setState();