方法重载
__call()当对一个对象未定义的实例方法进行调用(访问)的时候,会自动调用预先定义好的魔术方法:__call()
__callstatic()当对一个类未定义的静态方法进行调用(访问)的时候,会自动调用预先定义好的静态魔术方法:__callstatic()
Demo:
1 class Test{ 2 function f(){ 3 echo "在"; 4 } 5 6 //需要两个参数 7 //$fun_name:不存在的方法名 8 //$fun_arg:调用该不存在的方法时的所有实参--它是一个数组 9 function __call($fun_name,$fun_arg){10 //echo "调用不存在的普通实例方法";11 $count = count($fun_arg);12 if($fun_name == "do"){13 if($count == 1){14 $this->pa($fun_arg[0]);15 }elseif($count == 3){16 $this->papa($fun_arg[0],$fun_arg[1],$fun_arg[2]);17 }else{18 echo "MM:不要对我使用套路";19 }20 21 }else{22 echo "请勿打扰";23 }24 }25 function pa($pa){26 echo "GG:{ $pa}";27 echo "MM:叔叔,我们不约";28 }29 function papa($pa1,$pa2,$pa3){30 echo "MM:泡妞七字真言";31 echo "GG:{ $pa1}{ $pa2}{ $pa3}";32 }33 34 static function __callstatic($fun_name,$fun_arg){35 if($fun_name == "staticdo"){36 self::staticpa();37 }38 }39 static function staticpa(){40 echo "MM:gun~";41 }42 }43 $t = new Test();44 $t->f(); //调用存在的方法45 $t->f2(); //调用不存在的方法46 $t->do("约吗");47 $t->do("吃饭","看电影");48 $t->do("胆大","心细","脸皮厚");49 Test::staticdo();