溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php中魔術(shù)方法call指的是什么意思

發(fā)布時(shí)間:2021-05-27 10:03:37 來(lái)源:億速云 閱讀:204 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹php中魔術(shù)方法call指的是什么意思,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

php __call是php魔術(shù)方法中的一個(gè),當(dāng)程序調(diào)用到當(dāng)前類中未聲明或沒(méi)權(quán)限調(diào)用的方法時(shí),就會(huì)調(diào)用__call方法。

本文操作環(huán)境:Windows7系統(tǒng)、PHP7.1版,DELL G3電腦

php魔術(shù)方法__call

__call是魔術(shù)方法中的一個(gè),當(dāng)程序調(diào)用到當(dāng)前類中未聲明或沒(méi)權(quán)限調(diào)用的方法時(shí),就會(huì)調(diào)用__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(保護(hù)),所以實(shí)例出來(lái)的對(duì)象沒(méi)權(quán)限執(zhí)行,這時(shí)就跑到__call中去了.
       _call()有2個(gè)參數(shù),第一個(gè)m是當(dāng)前調(diào)用方法的名字,這里是'nowToTest',第二個(gè)m是當(dāng)前調(diào)用方法的名字,這里是 
′
 nowToTest 
′

,第二個(gè)params是調(diào)用'nowToTest'方法時(shí)傳入的參數(shù)。以數(shù)組的形式組合在$params中。

call_user_func_array(method,method,params)這個(gè)php方法的作用是調(diào)用 method方法,參數(shù)為method方法,參數(shù)為params,如果方法是在類中的話,就用上面那種數(shù)組形式調(diào)用就可以了,這里調(diào)用的是emptyFunc方法。 func_get_args()的作用是以數(shù)組形式獲取傳入的所有參數(shù)。而這些參數(shù)在__call中傳入的,第一個(gè)參數(shù)就是方法名。所以最后返回的結(jié)果是

"nowToTest function is not exists"

以上是“php中魔術(shù)方法call指的是什么意思”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI