PHP魔术方法之__call与__callStatic方法

Posted 追忆丶年华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP魔术方法之__call与__callStatic方法相关的知识,希望对你有一定的参考价值。

[php] view plain copy
 
  1. <?php  
  2.   
  3. class human{  
  4.   
  5. private function t(){  
  6.   }  
  7.   
  8. //魔术方法__call  
  9. /* 
  10. $method 获得方法名 
  11. $arg 获得方法的参数集合 
  12. */  
  13. public function __call($method,$arg){  
  14.     echo ‘你想调用我不存在的方法‘,$method,‘方法<br/>‘;  
  15.     echo ‘还传了一个参数<br/>‘;  
  16.     echo print_r($arg),‘<br/>‘;  
  17.   }  
  18. //魔术方法__callStatic  
  19. public static function __callStatic($method,$arg){  
  20.   
  21.     echo ‘你想调用我不存在的‘,$method,‘静态方法<br/>‘;  
  22.     echo ‘还传了一个参数<br/>‘;  
  23.     echo print_r($arg),‘<br/>‘;  
  24.   }  
  25.   
  26. }  
  27.   
  28. $li=new human();  
  29. $li->say(1,2,3);  
  30. /* 
  31. 调用一个未定义的方法 
  32. Fatal error: Call to undefined method human::say() in D:\wamp\www\php\59.php on line 8 
  33. */  
  34.   
  35. $li->t(‘a‘,‘b‘);  
  36. /*  
  37. __call是调用不可见(不存在或无权限)的方法时,自动调用  
  38. $lisi->say(1,2,3);-----没有say()方法----> __call(‘say‘,array(1,2,3))运行  
  39. */   
  40.   
  41. human::cry(‘痛哭‘,‘鬼哭‘,‘号哭‘);  
  42. /*  
  43. __callStatic 是调用不可见的静态方法时,自动调用.  
  44. Human::cry(‘a‘,‘b‘,‘c‘)----没有cry方法---> Human::__callStatic(‘cry‘,array(‘a‘,‘b‘,‘c‘));  
  45. */   
  46.   
  47. ?>  



天气预报小实例

[php] view plain copy
 
    1. <?php  
    2. //获得每个城市天气预报  
    3. class Action{  
    4.   
    5. public function tj(){  
    6.  echo ‘tj天气预报<br/>‘;  
    7.  }  
    8.   
    9. /* 
    10. $m 方法名 
    11. $p 方法参数集合 
    12. */  
    13. public function __call($m,$p){  
    14.   
    15.   echo $m,‘天气预报<br/>‘;  
    16.   }  
    17.   
    18. }  
    19.   
    20. $c=new Action();  
    21. $c->tj();  
    22.   
    23. //获得城市  
    24. $city=$_GET[‘method‘];  
    25.   
    26.   
    27. if(isset($city)){  
    28.   
    29. //获得城市的方法,由魔术方法__call处理  
    30. $c->$city();  
    31.   
    32. }  
    33. /* 
    34. 网址:http://localhost/php/60.php?method=beijing 
    35. 结果: 
    36. tj天气预报 
    37. beijing天气预报 
    38. */  
    39.   
    40.   
    41. ?>  


以上是关于PHP魔术方法之__call与__callStatic方法的主要内容,如果未能解决你的问题,请参考以下文章

PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep

PHP中__call()方法与重载解析

PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep

php魔术方法

PHP性能之语言性能优化:魔术方法好不好?

PHP中的__call和__callStatic方法(未看完)