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 サイトの他の関連記事を参照してください。