Maison  >  Article  >  développement back-end  >  Une brève discussion sur les fonctions call_user_func() et call_user_func_array() en PHP

Une brève discussion sur les fonctions call_user_func() et call_user_func_array() en PHP

little bottle
little bottleavant
2019-04-18 11:31:414086parcourir
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++.&#39;<br/>&#39;;
    echo $call++.&#39;<br/>&#39;;
    return $call;
}
$rs = call_user_func(&#39;_call&#39;,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.&#39;<br/>&#39;;
    echo ++$call.&#39;<br/>&#39;;
},$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 &#39;<br/>&#39;;
    //获取所有的参数,并以数组的形式返回
    $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.&#39; and argument is &#39;.$arg;
        }else{
            return $str;
        }
    }


    public function _Two($num){
        return $num ? $num + 1 : $num;
    }

}

echo "<br/>";
//调用类的静态方法
var_dump(call_user_func(&#39;Func::_One&#39;,&#39;one&#39;));
echo &#39;<br/>&#39;;
var_dump(call_user_func([&#39;Func&#39;,&#39;_One&#39;]));

$num = 4;
$o = new Func;
//调用类普通方法
$return = call_user_func(array($o,&#39;_Two&#39;),$num);
echo &#39;<br/>&#39;;
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__.&#39;\StaticDemo&#39;,&#39;_One&#39;),100);
call_user_func(&#39;App\StaticDemo::_One&#39;,200);
//调用public方法
call_user_func(array($obj,&#39;_Two&#39;),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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer