#この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューターphp __call は PHP マジック メソッドの 1 つで、現在のクラスで宣言されていないメソッド、または呼び出し権限がないメソッドをプログラムが呼び出すと、__call メソッドが呼び出されます。
php マジック メソッド __call
__call はマジック メソッドの 1 つです。プログラムが現在のクラスで宣言されていないメソッド、または呼び出し権限を持たないメソッドを呼び出すと、__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 ′が呼び出されます。 2 番目の params は、「nowToTest」メソッドを呼び出すときに渡されるパラメータです。 $params に配列として結合されます。 call_user_func_array(method, method, params) php メソッドの機能は、メソッドメソッドを呼び出すことです。パラメータはメソッドメソッドで、パラメータは params です。メソッドがクラス内にある場合は、はい、ここで emptyFunc メソッドが呼び出されます。 func_get_args() の機能は、配列の形式で渡されたすべてのパラメータを取得することです。これらのパラメータが __call で渡される場合、最初のパラメータはメソッド名になります。したがって、返される最終結果は
"nowToTest function is not exists"です。推奨される学習: "
PHP ビデオ チュートリアル "
以上がPHPのマジックメソッド呼び出しとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。