博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP魔术方法之__call与__callStatic方法
阅读量:5291 次
发布时间:2019-06-14

本文共 1213 字,大约阅读时间需要 4 分钟。

[php] 
 
 
  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] 
 
 
    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. ?>  

转载于:https://www.cnblogs.com/xiaoleiel/p/8324203.html

你可能感兴趣的文章
iOS ---Extension编程指南
查看>>
iOS开发UI篇—九宫格坐标计算
查看>>
laravel5.8ajax请求auth认证返回302的解决方法。
查看>>
POJ 1321 棋盘问题
查看>>
linux 安装weblogic12.1.3.0步骤
查看>>
SpringBoot使用thymeleaf时候遇到无法渲染问题(404/500)
查看>>
Red Hat安全性指南
查看>>
《构建之法》第五章自习感想与知识点
查看>>
[Swift]LeetCode741. 摘樱桃 | Cherry Pickup
查看>>
[Xcode 实际操作]六、媒体与动画-(8)使用CATransaction Reveal制作渐显动画
查看>>
[Xcode 实际操作]八、网络与多线程-(5)使用UIApplication对象发送邮件
查看>>
bzoj 1093: [ZJOI2007]最大半连通子图
查看>>
springCloud的zuul基于config和github实现热更新
查看>>
python学习笔记(pip下载安装)
查看>>
CSS
查看>>
shell 管道和tee使用时获取前面命令返回值
查看>>
[LeetCode] 55. Jump Game_ Medium tag: Dynamic Programming
查看>>
[Cypress] Stub a Post Request for Successful Form Submission with Cypress
查看>>
[TypeScript] Understanding Generics with RxJS
查看>>
一、基础篇--1.3进程和线程-基本概念
查看>>