文档章节

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

j
 jims
发布于 2016/04/20 17:26
字数 259
阅读 16
收藏 1
点赞 1
评论 0
今天在网上发现了一片好文章,介绍_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
博文 109
码字总数 29707
作品 0
合肥
php---魔术方法(Call()方法的重要之处)

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

durban ⋅ 2012/02/09 ⋅ 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 ⋅ 4

PHP中的java方式重载

有的时候,网站推广能够调用可变参数的同一个方法会非常方便。PHP能够定义带默认值的可选参数使这一做法成为可能。 可以在php5中用call()实现这种方法重载。下面来看一个示例。假设要用重载行...

网络营销 ⋅ 2012/01/12 ⋅ 0

Debian 6.04 nginx+mysql+php5-fpm fastcgi+pathinfo

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

ljpwinxp ⋅ 2012/05/12 ⋅ 0

JavaSE学习笔记系列:面向对象(2)

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

landy8530 ⋅ 2017/12/19 ⋅ 0

阅读《LEARNING HARD C#学习笔记》知识点总结与摘要一

本人有幸在Learning Hard举行的整点抢书活动《Learninghard C#学习笔记》回馈网友,免费送书5本中免费获得了一本《LEARNING HARD C#学习笔记》,我(梦在旅途)虽然从事.NET开发多年,但一直...

技术小牛人 ⋅ 2017/11/15 ⋅ 0

PHP学习笔记6:面向对象的PHP

读《PHP和MySQL Web开发》笔记合集: http://my.oschina.net/bluefly/blog/478580 1、面向对象和类 在面向对象的程序中,对象是一个被保存数据和操作这些数据的操作方法的唯一、可标识的集合...

slyso ⋅ 2015/10/26 ⋅ 0

Swift 个人学习笔记 - 09: 属性

本文章纯粹是中文版《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考 以下还是有很多没看懂、不确定的...

amc ⋅ 2017/03/25 ⋅ 0

PHP学习小结2

34。数组 (1)$arr = array();表示创建一个空数组,并把创建的空数组赋值给变量$arr。 (2)索引数组:索引数组是指数组的键是整数的数组,并且键的整数顺序是从0开始, 初始化:$friut=arra...

LizRose ⋅ 2016/03/08 ⋅ 0

Oracle之PL/SQL学习笔记之包

Oracle之PL/SQL学习笔记之包 1. 认识包(package) 1.1 什么是包 包是一组相关过程、函数、变量、常量和游标等PL/SQL程序设计元素的组合,它具有面向对象程序设计语言的特点,是对这些PL/SQL ...

残风vs逝梦 ⋅ 2014/09/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

【elasticsearch】 随笔 Date datatype

一。时间类型的本质 首先json是没有时间类型的,对于es来说,时间类型的标示可以是下面三种情况 1.一个时间格式的字符串,如:"2014-11-27T08:05:32Z","2015-01-01" or "2015/01/01 12:10:3...

xiaomin0322 ⋅ 28分钟前 ⋅ 0

阿里云资源编排ROS使用教程

阿里云资源编排ROS详细内容: 阿里云资源编排ROS使用教程 资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、...

mcy0425 ⋅ 30分钟前 ⋅ 0

适配器设计模式

1、适配器模式 把一个类的接口变换成客户端所期待的另一种接口 使原本因接口不匹配而无法在一起工作的两个类能够在一起工作 分为类的适配器模式和对象的适配器模式 2、类适配器模式 类的适配...

职业搬砖20年 ⋅ 34分钟前 ⋅ 0

npm操作报错 _stream_writable.js:61

有一天 不知道什么原因(估计和node的版本有关),无论你做什么npm的操作 都会报错/usr/local/lib/node_modules/npm/node_modules/readable-stream/lib/_stream_writable.js:61 这时候只要执...

lilugirl ⋅ 38分钟前 ⋅ 0

Eclipse安装插件的几种方式

Eclipse魅力之一就是支持可扩展的插件,来丰富自身的功能,这种方式也是建立在开源思想之上的。具体使用什么方式去安装插件,要看我们拿到的是什么。 1. 拿到的是一串URL,如http://subclips...

GordonNemo ⋅ 40分钟前 ⋅ 0

div图片叠加

css实现代码如下: <div style="position: relative;"><!--这个层为外面的父层,需设置相对位置样式--> <div style="position: absolute;"><!--子层,需设置绝对位置样式--> <i......

niithub ⋅ 42分钟前 ⋅ 0

作用域slot

如果父组件需要使用子组件中的内容怎么办,比如父组件需要控制子组件的显示 <div id="root"><child><template slot-scope="props"><h1>{{props.item}} <div>编辑</div></h1><......

金于虎 ⋅ 44分钟前 ⋅ 1

HongHu commonservice-eureka 项目构建过程

上一篇我们回顾了关于 spring cloud eureka的相关基础知识,现在我们针对于HongHu cloud的eureka项目做以下构建,整个构建的过程很简单,我会将每一步都构建过程记录下来,希望可以帮助到大家...

明理萝 ⋅ 47分钟前 ⋅ 1

xml和对象的相互转化

@Data//setter和getter方法,toString和equals,hashcode方法@EqualsAndHashCode//代表重写equals和hashcode方法@XmlAccessorType(XmlAccessType.FIELD)public class Classroom {@X......

拐美人 ⋅ 47分钟前 ⋅ 0

tableView cell的高度 分组头部尾部的高度 自适应

@property (nonatomic) CGFloat rowHeight; // default is UITableViewAutomaticDimension@property (nonatomic) CGFloat sectionHeaderHeight; // default is UITableViewA......

娜一片蓝色星海 ⋅ 48分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部