php __call是php魔術方法中的一個,當程式呼叫到目前類別中未宣告或沒權限呼叫的方法時,就會呼叫__call方法。
本文操作環境:Windows7系統、PHP7.1版,DELL G3電腦
php魔術方法__call
# __call是魔術方法中的一個,當程式呼叫到目前類別中未宣告或沒有權限呼叫的方法時,就會呼叫__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 ′
,第二個params是呼叫'nowToTest'方法時傳入的參數。以數組的形式組合在$params中。
call_user_func_array(method,method,params)這個php方法的作用是呼叫method方法,參數為method方法,參數為params,如果方法是在類別中的話,就用上面那種陣列形式呼叫就可以了,這裡呼叫的是emptyFunc方法。 func_get_args()的作用是以陣列形式取得傳入的所有參數。而這些參數在__call中傳入的,第一個參數就是方法名稱。所以最後回傳的結果是
"nowToTest function is not exists"
推薦學習:《PHP影片教學》
以上是php 魔術方法 call是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!