Das Prinzip des PHP-Ereignismechanismus

墨辰丷
Freigeben: 2023-03-31 08:34:02
Original
3199 Leute haben es durchsucht

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][&#39;object&#39;];
  }
  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][&#39;object&#39;] !== $this->holder)
        || (count($bt) < 2))) {
      throw(new Exception(&#39;Notify can only be called in holder&#39;));
    }
    foreach ($this->callbacks as $callback) {
      $args = func_get_args();
      call_user_func_array($callback, $args);
    }
  }
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!