php观察者模式和注册数模式,PHP观察者模式
觀察者模式的核心是允許你的應用程序注冊一個回調(diào),當某個特定的事件發(fā)生時便會觸發(fā)它。實現(xiàn)觀察者模式,我們使用一個名為Event的類實現(xiàn)它,這個類有2個公共的方法。
1. registerCallback() :這個方法允許你用規(guī)定的名稱附加許多回調(diào)到一個事件中
2. trigger() :這個方法將會觸發(fā)剛才命名的事件,并調(diào)用該事件已注冊的任何回調(diào)。
class Event{
static protected $callback = array();
static public function registerCallback($eventName,$callback){
if(!is_callable($callback)){
throw new Exception("Invalid callback");
}
$eventName=strtolower($eventName);
self::$callback[$eventName][]=$callback;
}
static public function trigger($eventName,$data){
$eventName = strtolower($eventName);
if(isset(self::$callback[$eventName])){
foreach(self::$callback[$eventName] as $callback){
$callback($data);
}
}
}
}
注冊事件:
class LogCallback{
public function __invoke($data){
echo "Log Data".$data;
echo "__invoke方法使用:當運行腳本試圖將對象作為一個方法使用時觸發(fā)".$data;
}
}
header("Content-Type:text/html; charset=utf-8");
Event::registerCallback('save',new LogCallback());
Event::registerCallback('save',function($data){
echo "匿名函數(shù)調(diào)用".$data;
echo "接下來觸發(fā)事件";
});
觸發(fā)事件:
class MyDataRecord{
public function save(){
Event::trigger('save',"
");
}
}
$evt=new MyDataRecord();
$evt->save();
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的php观察者模式和注册数模式,PHP观察者模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 零基础也能看懂python_零基础也能看
- 下一篇: php验证密码后跳转_php-larav