文档章节

PHP5学习笔记:用__call()实现方法重载

j
 jims
发布于 2016/04/20 17:26
字数 259
阅读 17
收藏 1
今天在网上发现了一片好文章,介绍_call()方法。
依靠这个方法可以实现方法重载,这是找了好久的东西了。
发在这里,算作笔记。
---------------------------------------
PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。

例七:__call
复制代码
<?php
class foo {
  function __call($name,$arguments) {
    print("Did you call me? I'm $name!");
  }
} $x = new foo();
$x->doStuff();
$x->fancy_stuff();
?>
复制代码



这个特殊的方法可以被用来实现“过载(overloading)”的动作,这样你就可以检查你的参数并且通过调用一个私有的方法来传递参数。

例八:使用 __call 实现“过载”动作

 

复制代码
<?php
class Magic {
  function __call($name,$arguments) {
    if($name=='foo') {
        if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
        if(is_string($arguments[0])) $this->foo_for_string($arguments[0]);
    }
  } 
  private function foo_for_int($x) {
        print("oh an int!");
  }  
  private function foo_for_string($x) {
        print("oh a string!");
  }

$x = new Magic();
$x->foo(3);
$x->foo("3");
?>

本文转载自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/09/22/2185032.html

共有 人打赏支持
j
粉丝 4
博文 172
码字总数 30033
作品 0
合肥
php---魔术方法(Call()方法的重要之处)

我们都知道,在PHP5中并没有真正的支持重载。但是我们可以想办法去实现它,借助的工具就是call()。我们来看例子。 class Test{ } $test = new Test();$test->fun('a');$test->fun('a','b');$...

durban
2012/02/09
0
0
分享35本关于PHP的学习书籍(免费下载)

分享35本关于PHP的学习书籍(免费下载) 1、PHP面向对象编程 2、PHP与MVC开发模式 3、PHP面向对象教程(强力推荐) 4、Smarty php模板引擎 5、phpmysqlwebdbs 6、PHP和MySQLWEB开发部分3 7、P...

邓剑彬
2012/12/01
446
4
Debian 6.04 nginx+mysql+php5-fpm fastcgi+pathinfo

工作忙,没有太多时间整理文档。请把笔记放上来吧。 安装系统,使用的是NET-INSTALL的ISO最小安装,只安装基本系统和系统工具。其他全部不安装,以保证系统的干净。 安装VIM编辑器 # apt-ge...

ljpwinxp
2012/05/12
0
0
JavaSE学习笔记系列:面向对象(2)

接下来一段时间,会持续发布一个JavaSE学习笔记系列文章! 1.构造方法 构造方法是用来初始化对象的一个方法。 使用new+构造方法可以创建一个对象。 构造方法没有返回值且与类同名。 当没有构...

landy8530
2017/12/19
0
0
tomcat 学习笔记之 载入器

1、标准web 应用程序的载入器,tomcat 中的载入器 servlet 容器需要实现一个自定义的载入器 由于servlet 容器不能完全信任运行的servlet 程序 使用系统类的载入器,则该类可以访问任何程序,...

职业搬砖20年
06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker Compose 原理

Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制。也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 dock...

Java干货分享
18分钟前
0
0
解决过滤器中设置cookie无效的问题

解决过滤器中设置cookie无效的问题 代码现场 filterChain.doFilter(sessionSyncRequestWrapper, response);Cookie emailCook = WebServletUtil.getSelectedCookie(request.getCookies(), ......

黄威
29分钟前
0
0
Hbase Schema 设计注意事项及最佳实践总结

一个列族的所有列在硬盘上存放在一起,使用这个特性可以把不同访问模式的列放在不同列族,以便隔离它们。这也是HBase被称为面向列族的存储(column-family-oriented store)的原因。 1、RowKe...

PeakFang-BOK
41分钟前
1
0
t-io给群组成员内置排序

1、实现比较器Comparator<ChannelContext> package xxx;import java.util.Comparator;import java.util.Objects;import java.util.Set;import java.util.TreeSet;import or......

talent-tan
45分钟前
2
0
px、em、rem 区别及作用

原文 起因: 一开始是为了解决页面放大时,字体不跟着放大的 bug。现在多用用于统一规范。 概念: 任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em...

lemos
54分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部