Maison > Article > développement back-end > Une brève discussion sur les fonctions call_user_func() et call_user_func_array() en PHP
Cet article donne principalement une brève explication des fonctions et de l'utilisation des fonctions call_user_func() et call_user_func_array() en PHP. Les amis intéressés peuvent en apprendre davantage.
call_user_func : Appeler un paramètre comme fonction de rappel
Description de l'utilisation :
call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] ) : mixed
Description du paramètre :
Premier Le le premier paramètre $callback est utilisé comme fonction de rappel, et les autres paramètres sont les paramètres de la fonction de rappel.
$parameter : Le paramètre transmis à la fonction de rappel $callback Notez que les paramètres ici ne peuvent pas être transmis par référence.
Les exemples simples suivants illustrent l'utilisation de call_user_func dans différentes situations :
//先引用,后执行 function _call($call){ echo $call++.'<br/>'; echo $call++.'<br/>'; return $call; } $rs = call_user_func('_call',1); var_dump($rs); //结果 //1 //2 //int(3)
Exécuter d'abord, puis référencer
$arg = 1; call_user_func(function ($call){ echo ++$call.'<br/>'; echo ++$call.'<br/>'; },$arg); //结果为2,3
La fonction de rappel ne passez une valeur, obtenez les paramètres via func_get_arg et func_get_args
$argOne = 1; $argTwo = 2; call_user_func(function (){ //获取第几个参数 $arg = func_get_arg(0); var_dump($arg); echo '<br/>'; //获取所有的参数,并以数组的形式返回 $args = func_get_args(); var_dump($args); //获取参数个数 $argNum = func_num_args(); echo "<br/>"; var_dump($argNum); },$argOne,$argTwo); //结果为 int(1) array(2) { [0]=> int(1) [1]=> int(2) } int(2)
Appel de méthodes de classe :
Il existe deux formes d'appel de méthodes statiques dans une classe et d'appel de la La méthode publique est la première. Les paramètres ne peuvent être que des tableaux
class Func{ static public function _One(){ $str = "THE CLASS NAME IS".__CLASS__." AND CLASS STATIC METHOD IS ".__METHOD__; $argNum = func_num_args(); if($argNum){ $arg = func_get_arg(0); return $str.' and argument is '.$arg; }else{ return $str; } } public function _Two($num){ return $num ? $num + 1 : $num; } } echo "<br/>"; //调用类的静态方法 var_dump(call_user_func('Func::_One','one')); echo '<br/>'; var_dump(call_user_func(['Func','_One'])); $num = 4; $o = new Func; //调用类普通方法 $return = call_user_func(array($o,'_Two'),$num); echo '<br/>'; var_dump($return); 结果: string(79) "THE CLASS NAME ISFunc AND CLASS STATIC METHOD IS Func::_One and argument is one" string(59) "THE CLASS NAME ISFunc AND CLASS STATIC METHOD IS Func::_One" int(5)
Lors de l'appel d'une classe avec un espace de noms, l'utilisation de call_user_func est la même que ci-dessus
//调用静态方法 call_user_func(array(__NAMESPACE__.'\StaticDemo','_One'),100); call_user_func('App\StaticDemo::_One',200); //调用public方法 call_user_func(array($obj,'_Two'),2,3,4);
Enfin :
est similaire à la fonction call_user_func. Il existe également call_user_func_array. La fonction de call_user_func_array est la même que celle de call_user_func
La différence est que call_user_func utilise une fonction de rappel pour traiter les caractères, tandis que call_user_func_array utilise un rappel pour traiter les tableaux. . Autrement dit, le deuxième paramètre de call_user_func_array ne peut être qu'un tableau.
Tutoriels associés : Tutoriel vidéo PHP
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!