关于PHP魔术方法__call的一点小发现
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了关于PHP魔术方法__call的一点小发现,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1881字,纯文字阅读大概需要3分钟。
内容图文
好久没有上博客园写文章了,今晚终于有点空了,就来写一下昨天的一点小发现。
我自己所知,C++,Java的面向对象都有多态的特点,而PHP没有,但PHP可以通过继承链方法的重写来实现多态的属性。而魔术方法会在特定情况下被触发,我们也可以对其进行重写。
---------------------------------------------------------------------------------------------------------摘抄开始------------------------------------------------------------------------------------------------------
以下摘自5idev.com:
__call()(Method overloading)
为了避免当调用的方法不存在时产生错误,可以使用 __call() 方法来避免。该方法在调用的方法不存在时会自动调用,程序仍会继续执行下去。
1 function __call(string$function_name, array$arguments) 2{ 3 ...... 4 }
该方法有两个参数,第一个参数 $function_name 会自动接收不存在的方法名,第二个 $args 则以数组的方式接收不存在方法的多个参数。
---------------------------------------------------------------------------------------------------------摘抄结束------------------------------------------------------------------------------------------------------
利用这一个特性,以及PHP的函数call_user_func_array,可以达到类似在控制器内用当前对象调用非继承链里的方法的效果,而我想调用的redis的方法(因为$this比$this->redis多打好多字呢。。。而且think PHP里面的缓存拓展使用起来也很麻烦(lll¬ω¬) )
下面贴一下代码:
1 <?php 2namespace Home\Controller; 3use Think\Controller; 4class BaseController extends Controller { 5 6protected$redis = null; 7/** 8 * [__construct description] 9 * 实例化redis 10*/11publicfunction __construct(){ 12if (!$this->redis) { 13$this->redis = new \Home\Controller\RedisController(); 14 } 15 parent::__construct(); 16 } 1718/** 19 * 重写方法重载方便使用redis 20 * @param string $method_name 重载的方法名 21 * @param array $args 参数 22 * @return mixed 返回结果 23*/24publicfunction __call($method_name, $args){ 25if (method_exists($this->redis, $method_name)) { 26returncall_user_func_array(array($this->redis, $method_name), $args); 27 } 28 parent::__call(); 29 } 30 }
写完之后,真的觉得自己分外风骚!不过因为是在think PHP3.2.3框架里面做的,get方法不能调用redis的(但其实可以把redis或者controller类里面的方法改名)虽然不知道这样做会不会有什么隐患或者问题,但我觉得这样做还是很方便的,以后有其他的类,还可以加进去。
如果代码有什么不足或者错误,请各位指正~谢谢~
原文:http://www.cnblogs.com/trustme326/p/7237047.html
内容总结
以上是互联网集市为您收集整理的关于PHP魔术方法__call的一点小发现全部内容,希望文章能够帮你解决关于PHP魔术方法__call的一点小发现所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。