PHP利用func_get_args和func_num_args函数实现函数重载实例


Posted in PHP onNovember 12, 2014

本文实例讲述了PHP利用func_get_args和func_num_args函数实现函数重载的方法。分享给大家供大家参考。具体方法分析如下:

学习php的朋友都知道php本身是没有函数重载这一说的,更没说像java,c那样使用方法,但如果我们深入了解一下会发现可以在php中使用func_get_args()和func_num_args()函数实现函数重载,下面来举两个函数重载例子.这两个函数实现函数的重载.

1、默认参数,如果一个函数里面,这不是必须参数,而添加相应的默认值,就可以完成相应的功能,代码如下:

function overloadFun($param1, $param2 = '1',$param3 = true)  

{  

 // do something   

}

利用函数func_get_args()和call_user_func_array(),PHP代码如下:
function rewrite() {     

$args = func_get_args();     

if(func_num_args() == 1) {     

func1($args[0]);     

} else if(func_num_args() == 2) {     

func2($args[0], $args[1]);     

}     

}     

    

function func1($arg) {     

echo $arg;     

}     

    

function func2($arg1, $arg2) {     

echo $arg1, ' ', $arg2;     

}     

    

rewrite('PHP'); //调用func1     

rewrite('PHP','China'); //调用func2

2、使用默认值,从而根据输入,得到自己想要的结果,代码如下:
function test($name="小李",$age="23"){    

echo $name."  ".$age;    

}    

test();    

echo "<br/>";    

test("a");    

echo "<br/>";    

test("a","b");

3、利用__call($name, $arg) 函数进行处理,代码如下:
<?php  

class OverLoad{  

function __call($name, $args)  

{  

  if($name=='overloadFun')  

  {  

   switch(count($args))  

   {  

    case 0: $this->overloadFun0();break;  

    case 1: $this->overloadFun1($args[0]); break;  

    case 2: $this->overloadFun2($args[0], $args[1]); break;  

    default: //do something  

      break;  

   }  

  }  

}  

     

function overloadFun0()  

{  

  echo 0;  

} 
function overloadFun1($var1)  

{  

  echo $var1;  

} 
function overloadFun2($var1,$var2)  

{  

    

  echo $var1+$var2;  

   }  

}    

$test=new OverLoad();  

$test->overloadFun()."<br />".   

$test->overloadFun(1)."<br />".   

$test->overloadFun(1,2)."<br />";  

?>

有了这样的方法之后我们就可以利用它们来实现简单函数重载了,但有一点要注明的是php 作为一种弱类型语言,本身不能像强类型如java,c++那样,直接的实现重载,至少现在不可以以后版本会不会有我们不知道.

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
Jun 08 PHP
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 PHP
生成ubuntu自动切换壁纸xml文件的php代码
Jul 17 PHP
php中var_export与var_dump的区别分析
Aug 21 PHP
PHP缓存技术的多种方法小结
Aug 14 PHP
thinkphp实现多语言功能(语言包)
Mar 04 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
Aug 19 PHP
PHP实现采集中国天气网未来7天天气
Oct 15 PHP
PHP中curl_setopt函数用法实例分析
Apr 16 PHP
简单的php+mysql聊天室实现方法(附源码)
Jan 05 PHP
PHP遍历目录文件的常用方法小结
Feb 03 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
Oct 17 PHP
PHP之sprintf函数用法详解
Nov 12 #PHP
php中simplexml_load_file函数用法实例
Nov 12 #PHP
php实现的ping端口函数实例
Nov 12 #PHP
PHP实现下载断点续传的方法
Nov 12 #PHP
php格式化日期实例分析
Nov 12 #PHP
PHP中的Streams详细介绍
Nov 12 #PHP
PHP产生不重复随机数的5个方法总结
Nov 12 #PHP
You might like
php 中英文语言转换类代码
2011/08/11 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
js简易namespace管理器 实例代码
2013/06/21 Javascript
jquery判断元素是否隐藏的多种方法
2014/05/06 Javascript
javascript if条件判断方法小结
2014/05/17 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
jQuery拖拽通过八个点改变div大小
2020/11/29 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
Angular2自定义分页组件
2017/04/19 Javascript
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
vue数据初始化initState的实例详解
2019/04/11 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
基于小程序请求接口wx.request封装的类axios请求
2020/07/02 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现压缩与解压gzip大文件的方法
2016/09/18 Python
Python使用sftp实现上传和下载功能(实例代码)
2017/03/14 Python
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
学习Python3 Dlib19.7进行人脸面部识别
2018/01/24 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
翻译专业应届生求职信
2013/11/23 职场文书
百度吧主申请感言
2014/01/12 职场文书
优秀少先队工作者事迹材料
2014/05/13 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers