Foros del Web » Programando para Internet » PHP »

Eventos en PHP

Estas en el tema de Eventos en PHP en el foro de PHP en Foros del Web. Hola amigos de Foros del Web Estoy tratando de entender bien el tema de los "Eventos", etc. y queria probar utilizar eventos en PHP, por ...
  #1 (permalink)  
Antiguo 25/05/2011, 11:43
 
Fecha de Ingreso: septiembre-2009
Ubicación: Neuquén
Mensajes: 142
Antigüedad: 14 años, 6 meses
Puntos: 12
Pregunta Eventos en PHP

Hola amigos de Foros del Web

Estoy tratando de entender bien el tema de los "Eventos", etc. y queria probar utilizar eventos en PHP, por ejemplo: ejecutar funciones al comenar lectura de datos en una B.D. o al autentificar un usuario, o algo basico como al crear un objecto y al destruirlo...

Hice algo y me funciona bastante bien, pero como todavia estoy aprendiendo del tema me gustaria que me ayuden, deben haber cosas que me faltan o se pueden mejorar...

Busque en Google, etc. pero todos lo explican de formas tan distintas que me confunde, por eso intente hacer un código por cuenta propia para entenderlo mejor.

Les muestro lo que hice...

Me base en 3 clases: Event, Subscriber y Publisher que debe ser extendida por el que va a "disparar" los eventos.
(La clase Object es simplemente un "setter" y "getter" de propiedades)

Código PHP:
Ver original
  1. abstract class Publisher {
  2.    
  3.     private $subscribers = array();
  4.    
  5.     public function __construct() {}
  6.    
  7.     public function subscribe($eventType, $callback, $arguments = null) {
  8.        
  9.         $Subscriber = new Subscriber($eventType, $callback, $arguments);
  10.        
  11.         $this->subscribers[$Subscriber->get('id')] = $Subscriber;
  12.        
  13.         return $Subscriber;
  14.     }
  15.    
  16.     public function unsubscribe(Subscriber $Subscriber) {
  17.        
  18.         $SubscriberID = $Subscriber->get('id');
  19.        
  20.         if (isset($this->subscribers[$SubscriberID])) {
  21.            
  22.             unset($this->subscribers[$SubscriberID]);
  23.         }
  24.     }
  25.    
  26.     public function publish($eventType) {
  27.        
  28.         $Event = new Event($eventType, $this);
  29.        
  30.         foreach ($this->subscribers as $subscriber) {
  31.            
  32.             if ($subscriber->get('eventType') == $eventType) {
  33.                
  34.                 $subscriber->notify($Event);
  35.             }
  36.         }
  37.     }
  38. }

Código PHP:
Ver original
  1. class Subscriber extends Object {
  2.    
  3.     protected $arguments;
  4.    
  5.     protected $callback;
  6.    
  7.     protected $eventType;
  8.    
  9.     protected $id;
  10.    
  11.     public function __construct($eventType, $callback, $arguments = null) {
  12.        
  13.         $id_prefix = 'subscriber-';
  14.         $id = uniqid($id_prefix);
  15.        
  16.         $this->id = $id;
  17.         $this->eventType = $eventType;
  18.         $this->callback = $callback;
  19.         $this->arguments = $arguments === null ? array() : $arguments;
  20.     }
  21.    
  22.     public function __toString() {
  23.        
  24.         return $this->id;
  25.     }
  26.    
  27.     public function notify(Event $Event) {
  28.        
  29.         // Pasar el objeto Event al Subscriber
  30.         array_unshift($this->arguments, $Event);
  31.        
  32.         return call_user_func_array($this->callback, $this->arguments);
  33.     }
  34. }

Código PHP:
Ver original
  1. class Event extends Object {
  2.    
  3.     protected $publisher;
  4.    
  5.     protected $type;
  6.    
  7.     public function __construct($type, Publisher &$Publisher) {
  8.        
  9.         $this->publisher = $Publisher;
  10.         $this->type = $type;
  11.     }
  12. }

Ahora la clases que hace uso de eventos:
Código PHP:
Ver original
  1. class Person extends Publisher {
  2.    
  3.     public function __construct() {
  4.        
  5.         $this->subscribe('sayHello', array(&$this, 'sayHello'));
  6.         $this->subscribe('sayGoodBye', array(&$this, 'sayGoodBye'));
  7.        
  8.         $this->publish('sayHello');
  9.     }
  10.    
  11.     public function __destruct() {
  12.         $this->publish('sayGoodBye');
  13.     }
  14.    
  15.     public function sayHello() {
  16.        
  17.         echo 'Hello!', PHP_EOL;
  18.     }
  19.    
  20.     public function sayGoodBye() {
  21.        
  22.         echo 'Good Bye!', PHP_EOL;
  23.     }
  24. }
  25.  
  26. $Person = new Person;

El resultado es:

Código HTML:
Ver original
  1. Hello!
  2. Good Bye!

¿Hay algo que deberia ser modificado?

Espero sus comentarios
__________________
Amigos de Foros del Web: seamos más solidarios. ¡No dejemos que un tema se valla al final de las páginas con 0 (cero) respuestas! ¡Gracias por su ayuda! :-)
  #2 (permalink)  
Antiguo 25/05/2011, 12:12
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Eventos en PHP

Que tal Nisrokh,

El spl tiene las interfaces SplObserver y SplSubject, las podrias implementar.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 25/05/2011, 12:21
 
Fecha de Ingreso: septiembre-2009
Ubicación: Neuquén
Mensajes: 142
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Eventos en PHP

Ni enterado de esas interfaces ¡Gracias!
__________________
Amigos de Foros del Web: seamos más solidarios. ¡No dejemos que un tema se valla al final de las páginas con 0 (cero) respuestas! ¡Gracias por su ayuda! :-)

Etiquetas: eventos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:32.