Maison > Article > développement back-end > Comment implémenter la fonction de rappel php ?
GlobalFonction de rappel :
La fonction globale signifie ici qu'elle est définie directement à l'aide de la fonction Function , qui n’est contenu dans aucun objet ou classe. Veuillez consulter l'exemple ci-dessous.
Exemple de code :
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 );
Description du code :
La fonction intégrée PHP call_user_func_array est utilisée ici pour effectuer l'appel. call_user_func_array a deux paramètres. Le premier paramètre est une chaîne , qui représente le nom de la fonction à appeler. Le deuxième paramètre est un tableau, qui représente la liste des paramètres, qui sera transmise à la fonction. être appelé dans l'ordre.
L'effet est le suivant :
Rappel de la méthode statique de la classe :
Si la méthode que nous voulons rappeler est une méthode statique d'une classe, alors que devons-nous faire ? Nous pouvons toujours utiliser la méthode call_user_func_array intégrée à PHP pour effectuer des appels. Veuillez voir l'exemple :
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 );
Description du code :
Ce code est très similaire au code de la première méthode. Nous allons Le nom de la classe (MyClass) est également transmis comme premier paramètre de call_user_func_array, et le rappel de la méthode statique de la classe peut être implémenté. Notez que le premier paramètre de call_user_func_array est un tableau à ce stade. Le premier élément du tableau est le nom de la classe et le deuxième élément est le nom de la fonction à appeler
Résultat de l'exécution :
(En fait, le résultat est le même que la première méthode ^_^)
Continuer à étudier
Si j'utilise cette méthode pour appeler une méthode non statique d'une classe (qui c'est-à-dire supprimer l'électricité statique), quel sera le résultat ? Veuillez consulter le code suivant
class MyClass { public 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 );Le résultat en cours d'exécution est toujours le même que l'image ci-dessus !
Rappels de méthodes objets :
我先用最原始的字符串形式的调用方法尝试了一下,如下所示:
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();
成功了,输出结果
调用是成功了,不过如何把参数params传给这个方法呢,如果把params直接传进去,那么它会作为1个参数,怎么把params拆开来传进去呢?
查了下PHP手册,找到了create_function函数,这个方法可以用字符串来创建一个匿名函数,好,有思路了,可以创建一个匿名的函数,在这个匿名函数中,调用我们的回调函数,并把参数传进去。
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' ); $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();
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!