__call方法用於調用類中未定義的方法,__callStatic方法用於調用類中爲調用的靜態方法,兩個函數都接受兩個參數,第一個參數爲函數名,第二個爲傳遞的參數。與其餘函數調用方式不一樣的是第一個參數的值會自動是調用的名字,第二個參數爲數組傳遞過來的。php
<?php class human{ private function t(){ } //魔術方法__call /* $method 得到方法名 $arg 得到方法的參數集合 */ public function __call($method,$arg){ echo '你想調用我不存在的方法',$method,'方法<br/>'; echo '還傳了一個參數<br/>'; echo print_r($arg),'<br/>'; } //魔術方法__callStatic public static function __callStatic($method,$arg){ echo '你想調用我不存在的',$method,'靜態方法<br/>'; echo '還傳了一個參數<br/>'; echo print_r($arg),'<br/>'; } } $li=new human(); $li->t('a','b'); /* __call是調用不可見(不存在或無權限)的方法時,自動調用 $lisi->say(1,2,3);-----沒有say()方法----> __call('say',array(1,2,3))運行 */ human::cry('痛哭','鬼哭','號哭'); /* __callStatic 是調用不可見的靜態方法時,自動調用. Human::cry('a','b','c')----沒有cry方法---> Human::__callStatic('cry',array('a','b','c')); */ ?>