马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
开始实现
目录结构:
Core
EventGenerator.php
Observer.php
indedx.php
EventGenerator.php:
[PHP] 纯文本查看 复制代码
<?php
namespace Core;
abstract class EventGenerator
{
private $observer = array();
function addObserver(Observer $observer){
$this->observer[] = $observer;
}
function notify(){
foreach ($this->observer as $observer){
$observer->update();
}
}
}
Observer.php:
[PHP] 纯文本查看 复制代码
<?php
namespace Core;
interface Observer
{
function update($event_info = null);
}
index.php
[PHP] 纯文本查看 复制代码
<?php
define('BASE_ROOT', __DIR__);
require_once BASE_ROOT.DIRECTORY_SEPARATOR.'core'.DIRECTORY_SEPARATOR.'AutoLoad.php';
spl_autoload_register('\\core\\AutoLoad::autoLoad');
class Event extends \Core\EventGenerator {
function trigger(){
echo "Event<br />";
$this->notify();
}
}
class Observer1 implements \Core\Observer{
function update($event_info = null)
{
echo "observer 1<br />";
}
}
class Observer2 implements \Core\Observer{
function update($event_info = null)
{
echo "observer 2<br />";
}
}
$ev = new Event();
$ev->addObserver(new Observer1());
$ev->addObserver(new Observer2());
$ev->trigger();
现在实现的时,每个需要执行的方法都是一个类中的一个同名方法
后面可以改进为传入某个类的方法,并传入参数进行处理
|