1. 程式人生 > >php之__call()和 __callStatic()

php之__call()和 __callStatic()

引出方法的使用場景

class Human{
    public function hello(){
        echo "hello <br/ >";
    }
}
$lisi=new Human();
$lisi->hello(); //hello 正確輸出

$lisi->say(); //出錯, Fatal error: Call to undefined method Human::say()

改進

class Human {
    public function hello() {
        echo 'hello<br />'
; } private function t() { } public static function __callStatic($method,$argu) { echo '你想呼叫一個不存在或不權呼叫的靜態方法',$method,'<br />'; echo '你呼叫時還傳了引數<br />'; print_r($argu); } public function __call($method,$argu) { echo '你想呼叫一個我不存在或不權呼叫的方法'
,$method,'<br />'; echo '你呼叫時還傳了引數<br />'; print_r($argu); } } $lisi = new Human(); $lisi->hello(); $lisi->say(1,2,3); $lisi->t('a','b','c'); /*__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'));

補充說明:

__callStatic()這個方法 是PHP5.3裡才新增的,比較新.
可能老版本的ediptlus的語法檔案裡,沒有他,所以有的編輯器中顏色可能會和其他內建函式的顏色不一樣

_call()在thinkphp中的應用

class Action {
    public function bj() {
        echo '北京天氣預報';
    }

    public function __call($m,$args) {
        echo $m,'天氣預報';
    }
}



$action = new Action();
$method = $_GET['method'];

if($method) {
    $action->$method();
}