Heim  >  Artikel  >  Backend-Entwicklung  >  Das Prinzip des PHP-Ereignismechanismus

Das Prinzip des PHP-Ereignismechanismus

墨辰丷
墨辰丷Original
2018-06-09 11:43:023201Durchsuche

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);
    }
  }
}

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!

Stellungnahme:
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