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. ?>

天气预报小实例

    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方法的更多相关文章

  1. 魔术方法之__call与__callStatic方法

    <?php class human{ private function t(){ } /** * 魔术方法__call * * @param string $method 获得方法名 * @pa ...

  2. PHP 魔术方法 __call 与 __callStatic 方法

    PHP 魔术方法 __call 与 __callStatic 方法 PHP 5.3 后新增了 __call 与 __callStatic 魔法方法. __call 当要调用的方法不存在或权限不足时,会 ...

  3. php -- 魔术方法 之 调用方法:__call()、__callStatic()

    方法重载:当调用一个不存在或者权限不够的方法的时候,会自动调用__call()方法 public function __call($name,$args){}  :用对象调用方法 public sta ...

  4. 魔术方法之__call、__callStatic

    1.__call() 作用,当调用不存在的方法时,会调用该方法.实际应用,当程序调用不存在的方法时,意外导致程序终止. .或者当你调用了受保护的或者是私人的方法时,也会自动调用__call方法 结果: ...

  5. __call()和__callStatic()方法

    __call() 当对象访问不存在的方法时,__call()方法会被自动调用__callStatic() 当对象访问不存在的静态方法时,__callStatic()方法会被自动调用 这两个方法在PHP ...

  6. php中__call() 和 __callStatic方法的使用

    __call 与__callStatic 魔法方法是php5.3后新增的,二者的应用场景: 1.当要调用的方法不存在或权限不足时,会自动调用__call 方法. 2.当调用的静态方法不存在或权限不足时 ...

  7. PHP中的__call和__callStatic方法

    如何防止调用不存在的方法而出错,使用__call魔术重载方法. __call方法原型如下: mixed __call(string $name,array $arguments) 当调用一个不可访问的 ...

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

    如何防止调用不存在的方法而出错,使用__call魔术重载方法. __call方法原型如下: mixed __call(string $name,array $arguments) 当调用一个不可访问的 ...

  9. 魔术方法以及__call的调用

    一.什么是魔术方法? 魔术方法是php中对一类方法的统称,这些方法可以在任何类中被实现.他们通常可以完成一些特殊的无法纯粹依靠自己编程实现的功能.他们通常以双下划线"__"作为名称 ...

随机推荐

  1. BZOJ3930 [CQOI2015]选数 【容斥】

    题目 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一步研 ...

  2. Java面试题之Array和ArrayList的区别

    Array和ArrayList的区别: 1.Array类型的变量在声明的同时必须进行实例化(至少得初花数组的大小),而ArrayList可以只是先声明: 2.Array始终是连续存放的:而ArrayL ...

  3. NIO系列1:框架拆解

    最近一年用NIO写了不少网络程序,也研究了一些开源NIO网络框架netty.mina等,总结了一下NIO的架构特点. 无论是netty还是mina它们都在java原生NIO的基础上进行了完善的封装,虽 ...

  4. hdu 3992 AC自动机上的高斯消元求期望

    Crazy Typewriter Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. Unity中LoadLevel与LoadLevelAsync的区别

    1.LoadLevel 同步加载 写法:Application.LoadLevel(“name”); 优点:读取场景使用同步的方法就可以,因为是同步方法所以读取的速度是最快的,也不用更新界面,因为同步 ...

  6. linux 中信号量

    ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程.常用于终止正在运行的程序.ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程.ctrl-d 不是发送信 ...

  7. Linux 之 Redis

    Linux 之 Redis 参考教程:[千峰教育] 一.Redis简介: 说明: 1.也是一种类似于Memcached的key-value机制的存储服务 2.是非关系型数据库(NoSQL)的一种 3. ...

  8. FileReader与FileWriter

    分别继承于InputStreamReader   OutputStreamWriter 所以: FileReader:new FileReader(“d:/back/string.txt”) =    ...

  9. 使用Zint和Zxing实现二维码的编码与解码(Using open-source tools to generate and decode Q-R code)

    1.Zint生成二维码 http://sourceforge.net/projects/zint/ [1]从上述站点下载Zint工具 [2]安装Zint工具 [3]使用Zint工具生成二维码,注意选择 ...

  10. vSphere Client 更改 ESX/ESXi 主机的端口

    https://blog.csdn.net/hanzheng260561728/article/details/51283808?locationNum=8&fps=1