hackpack / hacktions
用hacklang编写的活动库
v1.1.1
2014-05-21 03:03 UTC
Requires (Dev)
- hackpack/hackunit: dev-master
This package is not auto-updated.
Last update: 2024-09-14 15:16:40 UTC
README
"hacktions比言语更有说服力"
Hacklang的事件
用法
Hacktions暴露了两个特性
##EventEmitter
标准事件发射器,具有hack类型安全。
class MyEmitter { use EventEmitter; } $emitter = new MyEmitter(); //listeners all use variable argument signatures $lambda = (...) ==> print(func_get_args()[0]); $emitter->on('myevent', $lambda); //trigger fires all registered events with the given name - can take variable arguments $emitter->trigger('myevent', 'brian'); $emitter->off('myevent', $lambda); //remove a single listener $emitter->removeListeners(); //remove all listeners $emitter->removeListeners('myevent') //remove all 'myevent' events
##Subject
Hacktions支持显式的主题/观察者关系
class Cook { //Cook notifies Waiter objects use Subject<Waiter>; protected Vector<Burger> $cookedBurgers = {}; public function cook(Burger $burger): void { $this->cookedBurgers->add($burger); $this->notifyObservers(); } //implement methods to work on cooked items... } class Waiter implements Observer<Cook> { //Waiter observes a cook public function update(Cook $cook, ...): void { $burger = $cook->orderUp(); //deliver burger... } }
Subject有以下方法
###registerObserver(T $observer): void
向主题注册新的观察者。
###removeObserver(T $observer): void
从观察者列表中移除指定的对象。
###notifyObservers(...): void
通知所有观察者发生变化,并可选地传递额外数据。
##运行测试
测试使用HackUnit编写。它们可以通过以下方式运行
bin/hackunit Tests/
##hhi 如往常一样,如果需要进行类型检查,请确保将hhi文件复制到项目目录中
cp -r /usr/share/hhvm/hack/hhi /path/to/hacktions