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二维数组的去重问题解析
Jul 17 PHP
php获取通过http协议post提交过来xml数据及解析xml
Dec 16 PHP
php中将字符串转为HTML的实体引用的一个类
Feb 03 PHP
php json与xml序列化/反序列化
Oct 28 PHP
php几个预定义变量$_SERVER用法小结
Nov 07 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
Dec 24 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
Mar 07 PHP
php smtp实现发送邮件功能
Jun 22 PHP
laravel实现批量更新多条记录的方法示例
Oct 22 PHP
Laravel中9个不经常用的小技巧汇总
Apr 16 PHP
php和asp语法上的区别总结
May 12 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 字符串操作入门教程
2006/12/06 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
深入php中var_dump方法的使用详解
2013/06/24 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
2014/11/25 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
2014/08/27 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
2016/04/14 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
利用vue + koa2 + mockjs模拟数据的方法教程
2017/11/22 Javascript
Python操作MongoDB详解及实例
2017/05/18 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
Python中一个for循环循环多个变量的示例
2019/07/16 Python
Ubuntu+python将nii图像保存成png格式
2019/07/18 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
python实现简单文件读写函数
2021/02/25 Python
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
请解释流与文件有什么不同
2016/07/29 面试题
高职教师岗位职责
2013/12/24 职场文书
高中军训感言500字
2014/02/24 职场文书
新手上路标语
2014/06/20 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
骨干教师事迹材料
2014/12/17 职场文书
部队2015年终工作总结
2015/04/02 职场文书