1. イベントのバインドは、複数のアクションの 1 つのイベントへのバインドと 1 回限りのイベントのバインドをサポートします
2.イベントをトリガーする
3. ログアウトイベント
class Event
{
保護された静的 $listens = array();
パブリック静的関数 listen($event, $callback, $once=false){
if(!is_callable($callback)) は false を返します
true を返します
}
パブリック静的関数 one($event, $callback){
return self::listen($event, $callback, true);
}
パブリック静的関数remove($event, $index=null){
if(is_null($index))
unset(self::$listens[$event]);
その他
unset(self::$listens[$event][$index]);
}
パブリック静的関数trigger(){
If(!func_num_args()) が返る;
$event = array_shift($args);
If(!isset(self::$listens[$event])) は false を返します
foreach((配列) self::$listens[$event] as $index=>$listen){
$listen['once'] && self::remove($event, $index);
call_user_func_array($callback, $args);
}
}
}
呼び出しの例をいくつか示します:
コードをコピーします
コードは次のとおりです:
// 增加监听散歩イベント
イベント::リッスン('ウォーク', function(){
エコー「私は歩いています...n」;
});
// 增加监听散歩一次性イベント
イベント::リッスン('ウォーク', function(){
echo "聞いています...n";
}、 真実);
// 触覚ウォークイベント
イベント::トリガー('ウォーク');
/*
歩いてます…
聞いています…
*/
イベント::トリガー('ウォーク');
/*
歩いてます…
*/
イベント::one('言う', function($name=''){
echo "私は {$name}n です";
});
イベント::トリガー('言う', 'ディーカ'); // 输出 私はディーカです
イベント::トリガー('言う', 'ディーカ'); // 実行されません
クラスフー
{
パブリック関数 bar(){
echo "Foo::bar() が呼び出されます";
}
パブリック関数 test(){
echo "Foo::foo() が呼び出されます。 agrs:".json_encode(func_get_args())."n";
}
}
$foo = 新しい Foo;
イベント::listen('bar', array($foo, 'bar'));
イベント::トリガー('バー');
イベント::listen('テスト', array($foo, 'テスト'));
イベント::トリガー('テスト', 1, 2, 3);
クラスバー
{
パブリック静的関数 foo(){
echo "Bar::foo() が呼び出されます";
}
}
イベント::listen('bar1', array('Bar', 'foo'));
イベント::トリガー('bar1');
イベント::listen('bar2', 'Bar::foo');
イベント::トリガー('bar2');
関数 bar(){
echo "bar() が呼び出されます";
}
イベント::listen('bar3', 'bar');
イベント::トリガー('bar3');
ここで説明されている大規模な PHP プログラムの設計が役立つことを望みます。
http://www.bkjia.com/PHPjc/915435.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/915435.html技術記事具体的には次のように分析します。