蛋白质 / 事件
事件发射器-监听器全局类和行为特性
1.0.1
2019-05-29 14:36 UTC
Requires
- php: ^7.2
This package is auto-updated.
Last update: 2024-08-29 05:06:50 UTC
README
蛋白质 | 事件
事件发射器-监听器全局类和行为特性
安装
composer require proteins/event
通过
use Proteins\Event;
或在您的类中包含特性
use Proteins\Events; class MyClass { use Events; }
附加处理程序
您可以通过 on
方法将处理程序附加到命名事件。
Event::on('my.event',function(){ echo 'Hello, Friend!'; });
可以附加多个处理程序到事件,当事件被触发时,它们将按顺序执行。
Event::on('my.event',function(){ echo 'First!'; }); Event::on('my.event',function(){ echo 'Second!'; });
您可以将处理程序附加到任何事件名称。
触发事件
您可以通过 trigger
方法触发事件。
Event::trigger('my.event');
trigger
方法将返回一个数组,包含附加到事件的所有处理程序的返回值。
示例
Event::on('my.event',function(){ return 'Hello!'; }); Event::on('my.event',function(){ return time(); }); $results = Event::trigger('my.event');
变量 $results
包含
array(2) { [0] => string(6) "Hello!" [1] => int(1389115191) }
如果没有处理程序附加到事件,将返回 NULL
。
您可以使用 triggerOnce
方法仅触发一次。
将参数传递给事件处理程序
您可以在 trigger
方法中将参数传递给事件处理程序,并在事件名称后附加它们。
Event::on('eat',function($who,$what,$where){ echo "$who ate a $what, in the $where."; }); Event::trigger('eat','Simon','Burrito','Kitchen'); // Result : Simon ate a Burrito, in the Kitchen
使用 Events 特性
您可以将 Events 特性添加到任何现有类中。Events 特性具有与标准事件模块相同的方法签名(实际上,事件模块是 Events 特性的简单包装)。
class Game { use Events; public static function loadLevel($name){ ... self::trigger("level.loaded", $name); } } Game::on("level.start",function($level_name){ echo "Starting {$level_name}, BRING'EM'ON!!!\n"; }); Game::on("level.loaded",function($level_name){ echo "Reticulating splines for {$level_name}...\n"; Game::trigger("level.start", $level_name); }); Game::on("level.start",function($level_name){ echo "Replenish ammonitions...\n"; }); Game::loadLevel("E1M1");
Reticulating splines for E1M1...
Starting E1M1, BRING'EM'ON!!!
Replenish ammonitions...