您好,登錄后才能下訂單哦!
這篇文章主要介紹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è)資訊頻道!
免責(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)容。