ホームページ >バックエンド開発 >PHPチュートリアル >phpのマジックメソッド呼び出し
__call はマジック メソッドの 1 つです。プログラムが現在のクラスで宣言されていないメソッド、または呼び出す権限を持たないメソッドを呼び出すと、
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"__call メソッドが呼び出されます。上記のテスト クラスと同様に、nowToTest メソッドが存在しますが、このメソッドは protected で変更されているため、インスタンスからのオブジェクトには実行権限がなく、
_call() には 2 つのパラメーターがあります。最初の $m は現在呼び出しているメソッドの名前です。ここでは「nowToTest」です。2 番目の $params は「nowToTest」メソッドを呼び出すときに渡されるパラメータです。 $params に配列として結合されます。 _ L Call_user_func_array ($ Method, $ Params) PHP メソッドの役割は $ Method メソッドを呼び出すことであり、パラメータは $ Params メソッドです。 func_get_args() の機能は、配列の形式で渡されたすべてのパラメータを取得することです。これらのパラメーターが __call で渡される場合、最初のパラメーターはメソッド名になります。したがって、返される最終結果は
"nowToTest function is not exists"