Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert man eine PHP-Callback-Funktion?

Wie implementiert man eine PHP-Callback-Funktion?

怪我咯
怪我咯Original
2017-06-19 13:09:451255Durchsuche

GlobalCallback-Funktion:

Die Global-Funktion bedeutet hier, dass sie direkt über die Funktion Function definiert wird , das in keinem Objekt oder keiner Klasse enthalten ist. Bitte sehen Sie sich das Beispiel unten an.

Beispielcode:

function fnCallBack( $msg1 , $msg2 )
{
    echo 'msg1:'.$msg1;
    echo "<br />n";
    echo &#39;msg2:&#39;.$msg2;
}
$fnName = "fnCallBack";
$params = array( &#39;hello&#39; , &#39;world&#39; );
call_user_func_array( $fnName , $params );

Codebeschreibung:
Die in PHP integrierte Funktion call_user_func_array wird hier verwendet, um den Aufruf durchzuführen. call_user_func_array hat zwei Parameter. Der erste Parameter ist eine -Zeichenfolge , die den Namen der aufzurufenden Funktion darstellt. Der zweite Parameter ist ein Array, das die Parameterliste darstellt, an die die Funktion übergeben wird der Reihe nach aufgerufen werden.
Der Effekt ist wie folgt:

Rückruf der statischen Methode der Klasse:

Wenn die Methode, die wir zurückrufen möchten, eine statische Methode einer Klasse ist, was sollen wir dann tun? Wir können weiterhin die in PHP integrierte Methode call_user_func_array verwenden, um Aufrufe zu tätigen. Bitte sehen Sie sich das Beispiel an:

class MyClass
{
    public static function fnCallBack( $msg1 , $msg2 )
    {
        echo &#39;msg1:&#39;.$msg1;
        echo "<br />n";
        echo &#39;msg2:&#39;.$msg2;
    }
}
 
$className = &#39;MyClass&#39;;
$fnName = "fnCallBack";
$params = array( &#39;hello&#39; , &#39;world&#39; );
call_user_func_array( array( $className , $fnName ) , $params );

Codebeschreibung:

Dieser Code ist dem Code der ersten Methode sehr ähnlich. Wir werden den Klassennamen (MyClass) auch als ersten Parameter von call_user_func_array übergeben und den Rückruf der statischen Methode der Klasse implementieren. Beachten Sie, dass der erste Parameter von call_user_func_array zu diesem Zeitpunkt ein Array ist. Das erste Element des Arrays ist der Klassenname und das zweite Element ist der aufzurufende Funktionsname

Laufergebnis:


(Tatsächlich ist das Ergebnis das gleiche wie bei der ersten Methode ^_^)
Weiterlesen
Wenn ich diese Methode verwende, um eine nicht statische Methode einer Klasse aufzurufen (das ist, die statische Aufladung entfernen), was wird das Ergebnis sein? Bitte beachten Sie den folgenden Code

class MyClass
{
    public function fnCallBack( $msg1 , $msg2 )
    {
        echo &#39;msg1:&#39;.$msg1;
        echo "<br />n";
        echo &#39;msg2:&#39;.$msg2;
    }
}
 
$className = &#39;MyClass&#39;;
$fnName = "fnCallBack";
$params = array( &#39;hello&#39; , &#39;world&#39; );
call_user_func_array( array( $className , $fnName ) , $params );

Das Laufergebnis ist immer noch das gleiche wie im Bild oben!

Rückrufe von Objektmethoden:

    我先用最原始的字符串形式的调用方法尝试了一下,如下所示:

class MyClass
{
    private $name = &#39;abc&#39;;
    public function fnCallBack( $msg1 = &#39;default msg1&#39; , $msg2 = &#39;default msg2&#39; )
    {
        echo &#39;object name:&#39;.$this->name;
        echo "<br />n";
        echo &#39;msg1:&#39;.$msg1;
        echo "<br />n";
        echo &#39;msg2:&#39;.$msg2;
    }
}
 
$myobj = new MyClass();
$fnName = "fnCallBack";
$params = array( &#39;hello&#39; , &#39;world&#39; );
$myobj->$fnName();

成功了,输出结果

调用是成功了,不过如何把参数params传给这个方法呢,如果把params直接传进去,那么它会作为1个参数,怎么把params拆开来传进去呢?
查了下PHP手册,找到了create_function函数,这个方法可以用字符串来创建一个匿名函数,好,有思路了,可以创建一个匿名的函数,在这个匿名函数中,调用我们的回调函数,并把参数传进去。

class MyClass
{
    private $name = &#39;abc&#39;;
    public function fnCallBack( $msg1 = &#39;default msg1&#39; , $msg2 = &#39;default msg2&#39; )
    {
        echo &#39;object name:&#39;.$this->name;
        echo "<br />n";
        echo &#39;msg1:&#39;.$msg1;
        echo "<br />n";
        echo &#39;msg2:&#39;.$msg2;
    }
}
 
$myobj = new MyClass();
$fnName = "fnCallBack";
$params = array( &#39;hello&#39; , &#39;world&#39; );
$strParams = &#39;&#39;;
 
$strCode = &#39;global $myobj;global $fnName;global $params;$myobj->$fnName(&#39;;
for ( $i = 0 ; $i < count( $params ) ; $i ++ )
{
    $strParams .= ( &#39;$params[&#39;.$i.&#39;]&#39; );
    if ( $i != count( $params )-1 )
    {
        $strParams .= &#39;,&#39;;
    }
}
$strCode = $strCode.$strParams.");";
$anonymous = create_function( &#39;&#39; , $strCode);
$anonymous();

Das obige ist der detaillierte Inhalt vonWie implementiert man eine 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