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 相关文章推荐
PHP实现的功能是显示8条基色色带
Oct 09 PHP
PHP输出控制功能在简繁体转换中的应用
Oct 09 PHP
php google或baidu分页代码
Nov 26 PHP
$_GET['goods_id']+0 的使用详解
Jun 06 PHP
强烈声明: 不要使用(include/require)_once
Jun 06 PHP
解析func_num_args与func_get_args函数的使用
Jun 24 PHP
php中Snoopy类用法实例
Jun 19 PHP
smarty内部日期函数html_select_date()用法实例分析
Jul 08 PHP
PHP+Ajax无刷新带进度条图片上传示例
Feb 08 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
Jun 17 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
Oct 20 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
获得Google PR值的PHP代码
2007/01/28 PHP
PHP操作文件方法问答
2007/03/16 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
对 jQuery 中 data 方法的误解分析
2014/06/18 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
微信小程序中使用自定义图标(阿里icon)的方法
2018/08/20 Javascript
微信小程序通过一个json实现分享朋友圈图片
2019/09/03 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
nodejs中内置模块fs,path常见的用法说明
2020/11/07 NodeJs
[36:17]DOTA2上海特级锦标赛 - VGL音乐会全集
2016/03/06 DOTA
[02:18]《我与DAC》之工作人员:为了热爱DOTA2的玩家们
2018/03/28 DOTA
python框架中flask知识点总结
2018/08/17 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
python对象与json相互转换的方法
2019/05/07 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
2020/11/09 Python
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
简单介绍CSS3中Media Query的使用
2015/07/07 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
自荐书模板
2013/12/19 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
企业人事任命书
2014/06/05 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
女生抽烟检讨书
2014/10/05 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
JavaScript实现淘宝商品图切换效果
2021/04/29 Javascript
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python
vue-element-admin项目导入和导出的实现
2021/05/21 Vue.js