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 相关文章推荐
ADODB结合SMARTY使用~超级强
Nov 25 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
PhpDocumentor 2安装以及生成API文档的方法
May 21 PHP
php防止恶意刷新与刷票的方法
Nov 21 PHP
PHP易混淆知识整理笔记
Sep 24 PHP
php 数组处理函数extract详解及实例代码
Nov 23 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 PHP
PHP设计模式之工厂方法设计模式实例分析
Apr 25 PHP
tp5 sum某个字段相加得到总数的例子
Oct 18 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
Jul 19 PHP
phpStorm2020 注册码
Sep 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数组是否为索引数组的实现方法
2013/06/13 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
PHP开启opcache提升代码性能
2015/04/26 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
2017/08/10 PHP
js正确获取元素样式详解
2009/08/07 Javascript
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
javascript处理table表格的代码
2010/12/06 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
jquery popupDialog 使用 加载jsp页面的方法
2016/10/25 Javascript
JS实现touch 点击滑动轮播实例代码
2017/01/19 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
2017/02/27 Javascript
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
vue中选项卡点击切换且能滑动切换功能的实现代码
2018/11/25 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
Vue点击切换Class变化,实现Active当前样式操作
2020/07/17 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
举例说明类变量和实例变量的区别
2016/06/30 面试题
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
入党积极分子自我鉴定
2014/02/18 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
2015年感恩节活动总结
2015/03/24 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
公司员工宿舍管理制度
2015/08/07 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
浅谈mysql增加索引不生效的几种情况
2021/06/23 MySQL
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android
CSS3实现360度循环旋转功能
2022/02/12 HTML / CSS
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android