Heim > Artikel > Backend-Entwicklung > Implementierung des PHP-Ereignismechanismus
Wie implementiert PHP den Ereignismechanismus? In diesem Artikel wird hauptsächlich die Methode zur Implementierung des Ereignismechanismus in PHP vorgestellt und das Prinzip des Ereignismechanismus und die damit verbundene Implementierung von PHP anhand von Beispielen analysiert. Ich hoffe, es hilft allen.
Die spezifische Analyse lautet wie folgt:
Es gibt nicht viele Sprachen mit integriertem Ereignismechanismus, und PHP bietet eine solche Funktion nicht. Vereinfacht ausgedrückt ist ein Ereignis ein Beobachtermuster, das einfach zu implementieren ist. Der Unterschied besteht jedoch darin, dass jeder einen Ereignis-Listener hinzufügen kann, dieser jedoch nur durch das Objekt ausgelöst werden kann, das ihn direkt enthält. Das ist ein bisschen schwierig. PHP verfügt über eine debug_backtrace-Funktion, die den aktuellen Aufrufstapel abrufen kann. Auf diese Weise können Sie feststellen, ob das Objekt, das die ereignisauslösende Funktion aufruft, sein Objekt direkt enthält.
<?php /** * 事件 * * @author xiezhenye <xiezhenye@gmail.com> */ class Event { private $callbacks = array(); private $holder; function __construct() { $bt = debug_backtrace(); if (count($bt) < 2) { $this->holder = null; return; } $this->holder = &$bt[1]['object']; } function attach() { $args = func_get_args(); switch (count($args)) { case 1: if (is_callable($args[0])) { $this->callbacks[]= $args[0]; return; } break; case 2: if (is_object($args[0]) && is_string($args[1])) { $this->callbacks[]= array(&$args[0], $args[1]); } return; default: return; } } function notify() { $bt = debug_backtrace(); if ($this->holder && ((count($bt) >= 2 && $bt[count($bt) - 1]['object'] !== $this->holder) || (count($bt) < 2))) { throw(new Exception('Notify can only be called in holder')); } foreach ($this->callbacks as $callback) { $args = func_get_args(); call_user_func_array($callback, $args); } } }
Verwandte Empfehlungen:
Beispielanalyse, wie PHP simulierte HTTP-Anfragen implementiert
Detaillierte Erläuterung der Socket-Push-Technologie in PHP
PHPCrawl-Crawler-Bibliothek zur Implementierung von packenden Kugou-Songs Liste
Das obige ist der detaillierte Inhalt vonImplementierung des PHP-Ereignismechanismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!