Heim  >  Artikel  >  Backend-Entwicklung  >  Konzept und Verwendung der PHP-Callback-Funktion

Konzept und Verwendung der PHP-Callback-Funktion

小云云
小云云Original
2017-12-07 16:17:361581Durchsuche

1. Das Konzept der Rückruffunktion

Schauen wir uns zunächst die Callback-Funktion in der Sprache C an: Eine Callback-Funktion ist eine Funktion, die über einen Funktionszeiger aufgerufen wird. Wenn Sie einen Funktionszeiger (Adresse) als Parameter an eine andere Funktion übergeben und dieser Zeiger zum Aufrufen der Funktion verwendet wird, auf die er zeigt, sprechen wir von einer Callback-Funktion. Die Rückruffunktion wird nicht direkt vom Implementierer der Funktion aufgerufen, sondern von einer anderen Partei, wenn ein bestimmtes Ereignis oder eine bestimmte Bedingung eintritt, um auf das Ereignis oder die Bedingung zu reagieren.

Das Konzept der Rückruffunktionen in anderen Sprachen ist ähnlich, aber die Implementierungsmechanismen der Rückruffunktionen in verschiedenen Sprachen sind unterschiedlich. Im Allgemeinen ist die Rückruffunktion eine Funktion, die wir definieren, aber wir rufen sie nicht direkt auf, sondern durch Um eine andere Funktion aufzurufen, ruft diese Funktion die Rückruffunktion auf, indem sie deren Namen und Parameter empfängt.

2. Implementierung der Callback-Funktion in PHP

PHP bietet zwei integrierte Funktionen call_user_func() und call_user_func_array(), um Rückruffunktionen zu unterstützen. Der Unterschied zwischen diesen beiden Funktionen besteht darin, dass call_user_func_array die Parameter der Callback-Funktion in Form eines Arrays empfängt. Sie können es anhand seines Prototyps erkennen: mixed call_user_func_array ( callable $callback , array $param_arr ) , es hat nur zwei Parameter. Und call_user_func($callback, Parameter 1, Parameter 2,...) Die Anzahl der Parameter von wird entsprechend den Parametern der Callback-Funktion bestimmt.

So implementieren Sie Rückrufe für globale Funktionen in Skripten, nicht statische Methoden, die $this nicht in Klassen verwenden (die die Übergabe von Objekten erfordern), und statische Methoden in Klassen der Code, der den Test bestanden hat.

<?php
//普通函数
function f1($arg1,$arg2)
{
  echo __FUNCTION__.&#39;exec,the args is:&#39;.$arg1.&#39; &#39;.$arg2;
  echo "<br/>";
}
//通过call_user_func调用函数f1
call_user_func(&#39;f1&#39;,&#39;han&#39;,&#39;wen&#39;);
  //通过call_user_func_array调用函数
call_user_func_array(&#39;f1&#39;,array(&#39;han&#39;,&#39;wen&#39;));
class A
{
  public $name;
  function show($arg1)
  {
    echo &#39;the arg is:&#39;.$arg1."<br/>";
    echo &#39;my name is:&#39;.$this->name;
    echo "<br/>";
  }
  function show1($arg1,$arg2)
  {
    echo __METHOD__.&#39; exec,the args is:&#39;.$arg1.&#39; &#39;.$arg2."<br/>";
  }
  public static function show2($arg1,$arg2)
  {
    echo __METHOD__.&#39; of class A exec, the args is:&#39;.$arg1.&#39; &#39;.$arg2."<br/>";
  }
}
//调用类中非静态成员函数,该成员函数中有$this调用了对象中的成员
$a = new A;
$a->name = &#39;wen&#39;;
call_user_func_array(array($a,&#39;show&#39;,),array(&#39;han!&#39;));
//调用类中非静态成员函数,没有对象被创建,该成员函数中不能有$this
call_user_func_array(array(&#39;A&#39;,&#39;show1&#39;,),array(&#39;han!&#39;,&#39;wen&#39;));
//调用类中静态成员函数
call_user_func_array(array(&#39;A&#39;,&#39;show2&#39;),array(&#39;argument1&#39;,&#39;argument2&#39;));

Laufergebnisse:

f1exec,the args is:han wen
f1exec,the args is:han wen
the arg is:han!
my name is:wen
A::show1 exec,the args is:han! wen
A::show2 of class A exec, the args is:argument1 argument2

Verwandte Empfehlungen:

Die Bedeutung der Javascript-Rückruffunktion

Beispiel für die Anwendung einer Rückruffunktion

Detaillierte Erläuterung der Verwendung von PHP-Callback-Funktionen und anonymen Funktionen

Das obige ist der detaillierte Inhalt vonKonzept und Verwendung der PHP-Callback-Funktion. 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