Soyez le premier à donner votre avis sur cette source.
Snippet vu 17 645 fois - Téléchargée 20 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(); /* -------------------- */ ?>
Il n'est pas possible d'intercepter un évènement client via le code PHP uniquement.
as que il y a comme : onclick(),onchange(),onmosumove()...............ect.
Donc OUI, programmation evenementielle avec PHP ^^
et Merci pour ce bout de code sympa !
Cela ressemble beaucoup au design pattern d'état. L'idée est vraiment à creuser.
coooooool
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.