0/5 (21 avis)
Snippet vu 18 127 fois - Téléchargée 22 fois
<?php /* -------------------- */ class Delegate { private $Owner = null; private $MethodName = null; function __construct($owner, $method_name) { $this -> Owner = $owner; $this -> MethodName = $method_name; } function invoke($sender, $event) { $owner = $this -> Owner; $method_name = $this -> MethodName; $owner -> $method_name($sender, $event); } } /* -------------------- */ class Event { public $Description; function __construct($description) { $this -> Description = $description; } } /* -------------------- */ class Car { public $Name = ''; private $Started = false; public $OverSpeed = array(); private $Speed = 0; public function __call($method_name, $arguments) { if(substr($method_name, 0, 2) == 'on') { $event_name = substr($method_name, 2, strlen($method_name) - 2); if(property_exists($this, $event_name)) { $listeners = $this -> $event_name; foreach($listeners as $listener) { $listener -> invoke($arguments[0], $arguments[1]); } } } } public function __construct($name) { $this -> Name = $name; } public function accelerate() { if($this -> Started) { $speed = &$this -> Speed; $speed += 10; if($speed > 50) $this -> onOverSpeed($this, new Event("Excès de vitesse")); } else echo 'Démarre la voiture avant d\'accélerer ! <br />'; } public function start() { $this -> Started = true; } public function stop() { $this -> Started = false; } } /* -------------------- */ class PoliceOfficier { private $Matricule = null; function __construct($matricule) { $this -> Matricule = $matricule; } public function charge($sender, $event) { echo 'Ici l\'agent '.($this -> Matricule).'. Je dresse un procés verbal contre le conducteur de la '.($sender -> Name).' pour cause de '.strtolower($event -> Description).'. <br />'; $sender -> stop(); echo 'J\'ai arrêté l\'automobiliste ! Il est aussi complêtement bourré ! <br />'; } } /* -------------------- */ $john = new PoliceOfficier('3845-5214'); $porche = new Car('Porche'); $porche -> OverSpeed[] = new Delegate($john, 'charge'); $porche -> start(); $porche -> accelerate(); $porche -> accelerate(); $porche -> accelerate(); $porche -> accelerate(); $porche -> accelerate(); $porche -> accelerate(); $porche -> accelerate(); /* -------------------- */ ?>
13 juil. 2008 à 14:28
Il n'est pas possible d'intercepter un évènement client via le code PHP uniquement.
13 juil. 2008 à 10:19
as que il y a comme : onclick(),onchange(),onmosumove()...............ect.
4 avril 2007 à 18:14
Donc OUI, programmation evenementielle avec PHP ^^
et Merci pour ce bout de code sympa !
19 févr. 2007 à 17:17
Cela ressemble beaucoup au design pattern d'état. L'idée est vraiment à creuser.
coooooool
18 févr. 2007 à 14:14
En plus t'as oublié le contôle d'identité ,et si le conducteur s'appelle sarko, il faut le relacher.:-)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.