蛋白质/事件

事件发射器-监听器全局类和行为特性

1.0.1 2019-05-29 14:36 UTC

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...