sportspress pro plugin nulled php events event-handling

pro - PHP: ¿Cómo realizar el controlador de eventos?



sportspress pro nulled (4)

Métodos

Tienes varios métodos para hacerlo descritos aquí por ircmaxell.

Y aquí está ToroHook utilizado en ToroPHP (Routing lib).

Gancho

class ToroHook { private static $instance; private $hooks = array(); private function __construct() {} private function __clone() {} public static function add($hook_name, $fn){ $instance = self::get_instance(); $instance->hooks[$hook_name][] = $fn; } public static function fire($hook_name, $params = null){ $instance = self::get_instance(); if (isset($instance->hooks[$hook_name])) { foreach ($instance->hooks[$hook_name] as $fn) { call_user_func_array($fn, array(&$params)); } } } public static function remove($hook_name){ $instance = self::get_instance(); unset($instance->hooks[$hook_name]); var_dump($instance->hooks); } public static function get_instance(){ if (empty(self::$instance)) { self::$instance = new Hook(); } return self::$instance; } }

Usando gancho

Es simple llamarlo así:

ToroHook::add(''404'', function($errorpage){ render("page/not_found", array("errorpage" => $errorpage)); });

Deseo agregar controlador de eventos personalizado al método del objeto.

Tengo una clase con método.

class Post { public function Add($title) { // beforeAdd event should be called here echo ''Post "'' . $title . ''" added.''; return; } }

Deseo agregar un evento al método Add y pasar los argumentos del método al controlador de eventos.

function AddEventHandler($event, $handler){ // What should this function do? } $handler = function($title){ return strtoupper($title); } AddEventHandler(''beforeAdd'', $handler);

¿Es posible hacer algo como esto? Espero que mi pregunta sea clara.


Bueno, si estás usando <php 5.3 entonces no puedes crear un cierre de esa manera, pero puedes acercarte con create_function (); Esto sería

$handler = create_function(''$title'', ''return strtoupper($title);'');

Luego, almacena $ handler en la clase y puede llamarlo como lo desee.


Debería ser bastante fácil usando las funciones definidas aquí http://www.php.net/manual/en/book.funchand.php

En particular, debe mantener un conjunto de controladores (o un conjunto de matrices si desea varios controladores para el mismo evento) y luego simplemente hacer algo como

function AddEventHandler($event, $handler){ $handlerArray[$event] = $handler; }

o

function AddEventHandler($event, $handler){ $handlerArray[$event][] = $handler; }

en caso de múltiples manipuladores.

Invocar a los manejadores sería simplemente cuestión de llamar a " call_user_func " (eventualmente en un ciclo si se necesitan múltiples manejadores)


Mira en mi biblioteca de sphido / eventos :

  • es fácil de usar (pocas líneas de código)
  • basado en el manejo de funciones de PHP
  • permitir la priorización de oyentes
  • agregar / eliminar oyentes
  • filtrar valores por funciones
  • detener la propagación en la cadena funcional
  • agregar controlador predeterminado

Ejemplo de controlador de eventos

on(''event'', function () { echo "wow it''s works yeah!"; }); fire(''event''); // print wow it''s works yeah!

Ejemplo de función de filtro

add_filter(''price'', function($price) { return (int)$price . '' USD''; }); echo filter(''price'', 100); // print 100 USD