文档章节

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、php_mysql_web_dbs 6、PHP_和_MySQL_WEB_开发_部...

邓剑彬
2012/12/01
469
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

没有更多内容

加载失败,请刷新页面

加载更多

如何解决 homebrew 更新慢的问题

之前一直困扰于 Homebrew 的更新速度,曾试过修改更新源(清华、中科大等)的方式,但是并没什么卵用;也试过设置 curl 代理的方式,但是 brew 走的好像不是 curl 的方式,所以也没用。 通过...

whoru
9分钟前
0
0
TiDB EcoSystem Tools 原理解读系列(二)TiDB-Lightning Toolset 介绍

简介 TiDB-Lightning Toolset 是一套快速全量导入 SQL dump 文件到 TiDB 集群的工具集,自 2.1.0 版本起随 TiDB 发布,速度可达到传统执行 SQL 导入方式的至少 3 倍、大约每小时 100 GB,适合...

TiDB
11分钟前
0
0
【Visual Studio 扩展工具】如何在ComponentOneFlexGrid树中显示RadioButton

概述 在ComponentOne Enterprise .NET控件集中,FlexGrid表格控件是用户使用频率最高的控件之一。它是一个功能强大的数据管理工具,轻盈且灵动,以分层的形式展示数据(数据呈现更加直观)。...

葡萄城技术团队
13分钟前
0
0
Maven环境隔离

Maven环境隔离 1. 什么是Maven环境隔离 顾名思义,Maven环境隔离就是将开发中的环境与beat环境、生产环境分隔开,方便进行开发和维护。这个在实际项目中用的还是很多的,如果你的项目用的Mav...

蚂蚁-Declan
13分钟前
1
0
day182-2018-12-19-英语流利阅读-待学习

“性感”时代已去,维密将如何转身? Daniel 2018-12-19 1.今日导读 维多利亚的秘密(Victoria's Secret)这个内衣品牌,最近似乎步入了“中年危机”——曾经打遍天下的“性感”内衣,在主打...

飞鱼说编程
14分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部