In diesem Artikel werden hauptsächlich die Prinzipien des PHP-Ereignismechanismus vorgestellt. Ich hoffe, dass er für alle hilfreich ist.
Das Beispiel in diesem Artikel beschreibt, wie PHP den Ereignismechanismus implementiert. Die spezifische Analyse lautet wie folgt:
Es gibt nicht viele Sprachen mit integriertem Ereignismechanismus und PHP bietet keinen solchen eine solche Funktion. 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); } } }
Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.
Verwandte Empfehlungen:
PHP verwendet reguläre Ausdrücke, um Links im Inhalt zu extrahieren
PHP implementiert die Überprüfung chinesischer Schriftzeichen Code
php implementiert das Laden von Schriftarten und das Speichern
Das obige ist der detaillierte Inhalt vonDas Prinzip des PHP-Ereignismechanismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!