PHP 中的魔术方法——方法重载

方法重载

 __call()当对一个对象未定义的实例方法进行调用(访问)的时候,会自动调用预先定义好的魔术方法:__call()

 

   __callstatic()当对一个类未定义的静态方法进行调用(访问)的时候,会自动调用预先定义好的静态魔术方法:__callstatic()

 

Demo:

 

 1  class Test{
 2         function f(){
 3             echo "<br>在";
 4         }
 5 
 6         //需要两个参数
 7         //$fun_name:不存在的方法名
 8         //$fun_arg:调用该不存在的方法时的所有实参--它是一个数组
 9         function __call($fun_name,$fun_arg){
10             //echo "<br>调用不存在的普通实例方法";
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 "<br>MM:不要对我使用套路";
19                 }
20 
21             }else{
22                 echo "<br>请勿打扰";
23             }
24         }
25         function pa($pa){
26             echo "<br>GG:{$pa}";
27             echo "<br>MM:叔叔,我们不约";
28         }
29         function papa($pa1,$pa2,$pa3){
30             echo "<br>MM:泡妞七字真言";
31             echo "<br>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 "<br>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();
View Code

 

posted @ 2017-05-04 18:27  Rakishly  阅读(249)  评论(0编辑  收藏  举报