Heim >Backend-Entwicklung >PHP-Problem >Was ist der PHP-Magic-Methodenaufruf?

Was ist der PHP-Magic-Methodenaufruf?

藏色散人
藏色散人Original
2021-05-27 09:45:392499Durchsuche

php __call ist eine der magischen PHP-Methoden. Wenn das Programm eine Methode aufruft, die in der aktuellen Klasse nicht deklariert ist oder keine Aufrufberechtigung hat, wird die __call-Methode aufgerufen.

Was ist der PHP-Magic-Methodenaufruf?

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP-Version 7.1, DELL G3-Computer

PHP-Magiemethode __call

__call ist eine der magischen Methoden, wenn das Programm etwas aufruft, das nicht vorhanden ist in der aktuellen Klasse deklariert oder wenn keine Berechtigung zum Aufrufen einer Methode vorliegt, wird die __call-Methode

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 
′

aufgerufen. Der zweite Parameter ist der Parameter, der beim Aufruf der Methode „nowToTest“ übergeben wird. In $params als Array zusammengefasst.

Die Funktion der PHP-Methode call_user_func_array(method, method, params) besteht darin, die Methode method aufzurufen. Wenn sich die Methode in der Klasse befindet, verwenden Sie einfach die obige Array-Form Rufen Sie es auf. Hier wird die emptyFunc-Methode aufgerufen. Die Funktion von func_get_args() besteht darin, alle übergebenen Parameter in Form eines Arrays abzurufen. Wenn diese Parameter in __call übergeben werden, ist der erste Parameter der Methodenname. Das zurückgegebene Endergebnis ist also

"nowToTest function is not exists"

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der PHP-Magic-Methodenaufruf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn