PHP魔术方法之__call与__callStatic方法
2016-05-02 23:19
531 查看
转载:http://blog.csdn.net/binghui1990/article/details/9104685
个人小结:
外部调用内部未定义的方法的时候,自动调用__call或__callStatic
<?php class human{ private function t(){ } //魔术方法__call /* $method 获得方法名 $arg 获得方法的参数集合 */ public function __call($method,$arg){ echo '你想调用我不存在的方法',$method,'方法<br/>'; echo '还传了一个参数<br/>'; echo print_r($arg),'<br/>'; } //魔术方法__callStatic public static function __callStatic($method,$arg){ echo '你想调用我不存在的',$method,'静态方法<br/>'; echo '还传了一个参数<br/>'; echo print_r($arg),'<br/>'; } } $li=new human(); $li->say(1,2,3); /* 调用一个未定义的方法 Fatal error: Call to undefined method human::say() in D:\wamp\www\php\59.php on line 8 */ $li->t('a','b'); /* __call是调用不可见(不存在或无权限)的方法时,自动调用 $lisi->say(1,2,3);-----没有say()方法----> __call('say',array(1,2,3))运行 */ human::cry('痛哭','鬼哭','号哭'); /* __callStatic 是调用不可见的静态方法时,自动调用. Human::cry('a','b','c')----没有cry方法---> Human::__callStatic('cry',array('a','b','c')); */ ?>天气预报小实例
<?php //获得每个城市天气预报 class Action{ public function tj(){ echo 'tj天气预报<br/>'; } /* $m 方法名 $p 方法参数集合 */ public function __call($m,$p){ echo $m,'天气预报<br/>'; } } $c=new Action(); $c->tj(); //获得城市 $city=$_GET['method']; if(isset($city)){ //获得城市的方法,由魔术方法__call处理 $c->$city(); } /* 网址:http://localhost/php/60.php?method=beijing 结果: tj天气预报 beijing天气预报 */ ?>
个人小结:
外部调用内部未定义的方法的时候,自动调用__call或__callStatic
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- php7 读取php.ini[4]
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- 简单好用的PHP分页类
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- PHP VBS JS 函数 对照表