文档章节

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

j
 jims
发布于 2016/04/20 17:26
字数 259
阅读 16
收藏 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
博文 170
码字总数 29865
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
0
0
spring EL 和资源调用

资源调用 import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.PropertySource;import org.springframework.core.io.Resource;......

Canaan_
今天
0
0
memcached命令行、memcached数据导出和导入

一、memcached命令行 yum装telnet yum install telent 进入memcached telnet 127.0.0.1 11211 命令最后的2表示,两位字节,30表示过期时间(秒) 查看key1 get key1 删除:ctrl+删除键 二、m...

Zhouliang6
今天
0
0
Linux定时备份MySQL数据库

做项目有时候要备份数据库,手动备份太麻烦,所以找了一下定时备份数据库的方法 Linux里有一个 crontab 命令被用来提交和管理用户的需要周期性执行的任务,就像Windows里的定时任务一样,用这...

月夜中徘徊
今天
1
1
shell-日志脚本小实验

1.查找日志2018-8-15,求得那一分钟访问量最大。 #/bin/bash#from cc#2018-8-15#2018-08-15.log 哪一分钟 访问量 最大for d in `ls /data/nginx/logs/`doif [ -a 2018-08-15...

chencheng-linux
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部