Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung der Verwendung der Callback-Funktion der benutzerdefinierten PHP-Funktion
Ich entwickle kürzlich ein PHP-System. Um die Skalierbarkeit des Systems zu verbessern, möchte ich dem System beispielsweise einen Ereignisverarbeitungsmechanismus hinzufügen : Ich möchte dem System eine Nachricht hinzufügen. Nach dem Hinzufügen möchte ich das Protokoll mit Javascript-ähnlichem Code aufzeichnen. Es sollte wie folgt geschrieben werden:
Darunter die Funktion fnCallBack ist diefunction fnCallBack( $news ) { //将$news的信息记录到日志中 writeLog( $news->getTitle().' has been added successfully!'); } $newsEventManager->addEventListener( 'add' , fnCallBack );Callback-Funktion
, und addEventListener bedeutet, auf das Hinzufügungsereignis von newsEventManager zu hören. Wenn ein Nachrichtenartikel hinzugefügt wird, ruft das System die Funktion fnCallBack auf, um die Aktion writeLog abzuschließen. Allerdings unterscheidet sich die Funktionsübergabemethode in PHP stark von der in Javascript. In Javascript sind Funktionen ebenfalls Objekte und können problemlos als Parameter übergeben werden, in PHP jedoch nicht.
$newsEventManager->addEventListener( 'add' , fnCallBack );
Um unser Ereignismodell zu implementieren, ist es notwendig, die Implementierungsmethode der Rückruffunktion von PHP zu untersuchen.
1.
Die globale Funktion bedeutet hier eine Funktion, die direkt über die Funktion definiert wird. Sie ist in keinem Objekt oder einer Klasse enthalten. Bitte schauen Sie sich das folgende Beispiel an
Beispielcode:
function fnCallBack( $msg1 , $msg2 ) { echo 'msg1:'.$msg1; echo "<br />\n"; echo 'msg2:'.$msg2; } $fnName = "fnCallBack"; $params = array( 'hello' , 'world' ); call_user_func_array( $fnName , $params );Die in PHP integrierte Funktion call_user_func_array wird hier verwendet, um den Aufruf durchzuführen. call_user_func_array verfügt über zwei Parameter. Der erste Parameter ist eine Zeichenfolge, die den Namen der aufzurufenden Funktion angibt. Der zweite Parameter ist ein Array, das die Parameterliste angibt, die der Reihe nach an die aufzurufende Funktion übergeben wird.
2.
Was sollen wir tun, wenn die Methode, die wir zurückrufen möchten, eine statische Methode einer Klasse ist? Klasse? ? Wir können weiterhin die in PHP integrierte call_user_func_array-Methode verwenden, um Aufrufe zu tätigen. Sehen Sie sich bitte das Beispiel an:
Beispielcode:class MyClass { public static function fnCallBack( $msg1 , $msg2 ) { echo 'msg1:'.$msg1; echo "<br />\n"; echo 'msg2:'.$msg2; } } $className = 'MyClass'; $fnName = "fnCallBack"; $params = array( 'hello' , 'world' ); call_user_func_array( array( $className , $fnName ) , $params );Dieser Code ist derselbe wie der Erste Methode Der Code ist sehr ähnlich. Wir übergeben den Klassennamen (MyClass) als ersten Parameter von call_user_func_array, um den Rückruf der statischen Methode der Klasse zu 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 Name der aufzurufenden Funktion
3 Methode
class MyClass { private $name = 'abc'; public function fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' ) { echo 'object name:'.$this->name; echo "<br />\n"; echo 'msg1:'.$msg1; echo "<br />\n"; echo 'msg2:'.$msg2; } } $myobj = new MyClass(); $fnName = "fnCallBack"; $params = array( 'hello' , 'world' ); $myobj->$fnName();Ich habe im
PHP-Handbuch
nachgesehen und die Funktion „create_function“ gefunden. Diese Methode kann Zeichenfolgen verwenden, um eine anonyme Funktion zu erstellen . Rufen Sie in dieser anonymen Funktion unsere Rückruffunktion auf und übergeben Sie die Parameter. Erstellen Sie zunächst manuell eine anonyme Funktion anonym. Verwenden Sie in dieser Funktion die Methode, die ich zuvor gelernt habe, um die Rückruffunktion aufzurufen, wie unten gezeigt:
class MyClass { private $name = 'abc'; public function fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' ) { echo 'object name:'.$this->name; echo "<br />\n"; echo 'msg1:'.$msg1; echo "<br />\n"; echo 'msg2:'.$msg2; } } $myobj = new MyClass(); $fnName = "fnCallBack"; $params = array( 'hello' , 'world' ); function anonymous() { global $myobj; global $fnName; global $params; $myobj->$fnName( $params[0] , $params[1] ); } anonymous();
$strParams = ''; $strCode = 'global $myobj;global $fnName;global $params;$myobj->$fnName('; for ( $i = 0 ; $i < count( $params ) ; $i ++ ) { $strParams .= ( '$params['.$i.']' ); if ( $i != count( $params )-1 ) { $strParams .= ','; } } $strCode = $strCode.$strParams.");"; $anonymous = create_function( '' , $strCode); $anonymous();
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung der Callback-Funktion der benutzerdefinierten PHP-Funktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!