Maison >développement back-end >Problème PHP >Qu'est-ce que l'appel de la méthode magique php ?
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.
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!