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的图形函数中显示汉字
Oct 09 PHP
PHP 读取文件内容代码(txt,js等)
Dec 06 PHP
php INI配置文件的解析实现分析
Jan 04 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
Jan 09 PHP
php截取字符串并保留完整xml标签的函数代码
Feb 06 PHP
php批量添加数据与批量更新数据的实现方法
Dec 16 PHP
php匹配字符中链接地址的方法
Dec 22 PHP
PHP数组操作类实例
Jul 11 PHP
ThinkPHP 模板substr的截取字符串函数详解
Jan 09 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
Aug 18 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 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
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
2011/03/19 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
2014/05/12 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
php猴子选大王问题解决方法
2015/05/12 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
索趣科技的答案
2007/02/07 Javascript
asp 取文本框名称代码
2008/12/02 Javascript
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
JS实现仿QQ效果的三级竖向菜单
2015/09/25 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
Highcharts入门之简介
2016/08/02 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
python实现数组插入新元素的方法
2015/05/22 Python
python 排序算法总结及实例详解
2016/09/28 Python
Python随机函数random()使用方法小结
2018/04/29 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
python异常处理try except过程解析
2020/02/03 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
如何用border-image实现文字气泡边框的示例代码
2020/01/21 HTML / CSS
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
高中毕业自我鉴定
2013/12/13 职场文书
道德模范先进事迹
2014/02/14 职场文书
土木工程师职业规划范文
2014/03/07 职场文书
主题教育活动总结
2014/05/05 职场文书
社团个人总结范文
2015/03/05 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
Java多条件判断场景中规则执行器的设计
2021/06/26 Java/Android
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL