1. 程式人生 > >PHP魔術方法之__call與__callStatic方法

PHP魔術方法之__call與__callStatic方法

ring 魔術方法 local csdn boa -c isset sta 自動調用

[php] view plain copy
  1. <?php
  2. class human{
  3. private function t(){
  4. }
  5. //魔術方法__call
  6. /*
  7. $method 獲得方法名
  8. $arg 獲得方法的參數集合
  9. */
  10. public function __call($method,$arg){
  11. echo ‘你想調用我不存在的方法‘,$method,‘方法<br/>‘;
  12. echo ‘還傳了一個參數<br/>‘;
  13. echo print_r($arg),‘<br/>‘;
  14. }
  15. //魔術方法__callStatic
  16. public static function __callStatic($method,$arg){
  17. echo ‘你想調用我不存在的‘,$method,‘靜態方法<br/>‘;
  18. echo ‘還傳了一個參數<br/>‘;
  19. echo print_r($arg),‘<br/>‘;
  20. }
  21. }
  22. $li=new human();
  23. $li->say(1,2,3);
  24. /*
  25. 調用一個未定義的方法
  26. Fatal error: Call to undefined method human::say() in D:\wamp\www\php\59.php on line 8
  27. */
  28. $li->t(‘a‘,‘b‘);
  29. /*
  30. __call是調用不可見(不存在或無權限)的方法時,自動調用
  31. $lisi->say(1,2,3);-----沒有say()方法----> __call(‘say‘,array(1,2,3))運行
  32. */
  33. human::cry(‘痛哭‘,‘鬼哭‘,‘號哭‘);
  34. /*
  35. __callStatic 是調用不可見的靜態方法時,自動調用.
  36. Human::cry(‘a‘,‘b‘,‘c‘)----沒有cry方法---> Human::__callStatic(‘cry‘,array(‘a‘,‘b‘,‘c‘));
  37. */
  38. ?>



天氣預報小實例

[php] view plain copy
    1. <?php
    2. //獲得每個城市天氣預報
    3. class Action{
    4. public function tj(){
    5. echo ‘tj天氣預報<br/>‘;
    6. }
    7. /*
    8. $m 方法名
    9. $p 方法參數集合
    10. */
    11. public function __call($m,$p){
    12. echo $m,‘天氣預報<br/>‘;
    13. }
    14. }
    15. $c=new Action();
    16. $c->tj();
    17. //獲得城市
    18. $city=$_GET[‘method‘];
    19. if(isset($city)){
    20. //獲得城市的方法,由魔術方法__call處理
    21. $c->$city();
    22. }
    23. /*
    24. 網址:http://localhost/php/60.php?method=beijing
    25. 結果:
    26. tj天氣預報
    27. beijing天氣預報
    28. */
    29. ?>

PHP魔術方法之__call與__callStatic方法