Maison >développement back-end >Problème PHP >Qu'est-ce que l'appel de la méthode magique php ?

Qu'est-ce que l'appel de la méthode magique php ?

藏色散人
藏色散人original
2021-05-27 09:45:392511parcourir

php __call est l'une des méthodes magiques PHP Lorsque le programme appelle une méthode qui n'est pas déclarée ou n'a pas la permission d'appeler dans la classe actuelle, la méthode __call sera appelée.

Qu'est-ce que l'appel de la méthode magique php ?

L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3

méthode magique php __call

__call est l'une des méthodes magiques Lorsque le programme appelle une méthode qui n'est pas déclarée ou n'a pas la permission d'appeler dans la classe actuelle, la méthode __call

class test
{
  public function emptyFunc(){
    $getArgs = func_get_args();
    $funcName = $getArgs[0];
    //$params = array_slice($getArgs, 1);
    //var_dump($params);  // this is params                
    return $funcName . ' function is not exists';
  }
  public function __call($m, $params)
  {
     $arr[] = $m;
     $arr = array_merge($arr, $params);
     return call_user_func_array(array($this, 'emptyFunc'), $arr);
  }
  protected function nowToTest(){
    return 'this is nowToTest';
  }
}
$testObj = new test();
var_dump($testObj->nowToTest('params1','params1'));
//var_dump result => string(29) "nowToTest function is not exists"
       如上test类中,nowToTest方法是存在的,但修饰这方法的是protected(保护),所以实例出来的对象没权限执行,这时就跑到__call中去了.
       _call()有2个参数,第一个m是当前调用方法的名字,这里是'nowToTest',第二个m是当前调用方法的名字,这里是 
′
 nowToTest 
′

sera appelée. . Le deuxième paramètre est les paramètres transmis lors de l'appel de la méthode 'nowToTest'. Combiné dans $params sous forme de tableau.

La fonction de la méthode php call_user_func_array(method, method, params) est d'appeler la méthode méthode. Le paramètre est la méthode méthode et le paramètre est params. sous la forme du tableau ci-dessus pour l'appeler. D'accord, la méthode emptyFunc est appelée ici. La fonction de func_get_args() est d'obtenir tous les paramètres transmis sous la forme d'un tableau. Lorsque ces paramètres sont passés dans __call, le premier paramètre est le nom de la méthode. Le résultat final renvoyé est donc

"nowToTest function is not exists"

Apprentissage recommandé : "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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn