写了一个基于PHP的事件机制
作者:左轻侯
1108字节
点击:8309
回复:281
所属分类:技术随笔
创建时间:2006-07-26 02:22:06
最后修改时间:2006-07-26 02:22:06
EventUtils:
final class EventArgs {
}
interface EventHandler {
public function Invoke($Sender, EventArgs $E);
}
class Event {
private $EventHandlerList = array ();
public function AddEventHandler(EventHandler $EventHandler) {
$this->EventHandlerList[] = $EventHandler;
}
public function DeleteEventHandler(EventHandler $EventHandler) {
$Index = array_search($EventHandler, $this->EventHanlerList);
array_splice($this->EventHanlerList, $Index, 1);
}
public function Invoke($Sender, EventArgs $E) {
foreach ($this->EventHandlerList as $EventHandler) {
$EventHandler->Invoke($Sender, $E);
}
}
}
Test Case:
class TestEventHandler implements EventHandler {
public function Invoke($Sender, EventArgs $E) {
echo "Hello, ".$Sender;
}
}
function TestEvent() {
$Event = new Event();
$EventHandler = new TestEventHandler();
$Event->AddEventHandler($EventHandler);
$Event->Invoke($Event, new EventArgs());
}
Output:
Hello, Object id #5ok.
支持Multicast
麻烦的是,PHP不支持internal class,这个机制可能还要修改
明天再说