首頁 >後端開發 >PHP問題 >php 魔術方法 call是什麼

php 魔術方法 call是什麼

藏色散人
藏色散人原創
2021-05-27 09:45:392514瀏覽

php __call是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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn