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 shell命令合并图片的代码
Jun 23 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
ThinkPHP之A方法实例讲解
Jun 20 PHP
PHP连接MySQL数据的操作要点
Mar 20 PHP
PHP中include/require/include_once/require_once使用心得
Aug 28 PHP
Laravel+jQuery实现AJAX分页效果
Sep 14 PHP
PHP 接入微信扫码支付总结(总结篇)
Nov 03 PHP
浅谈php中fopen不能创建中文文件名文件的问题
Feb 06 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
详解PHP中的外观模式facade pattern
Feb 05 PHP
laravel实现按时间日期进行分组统计方法示例
Mar 23 PHP
php设计模式之装饰模式应用案例详解
Jun 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
雄兵连:天使彦天使彦为爱折翼,彦和炙心同时念动的誓言!
2020/03/02 国漫
php中static静态变量的使用方法详解
2010/06/04 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
2015/11/18 PHP
ThinkPHP的SAE开发相关注意事项详解
2016/10/09 PHP
PHP对称加密函数实现数据的加密解密
2016/10/27 PHP
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python自动化开发学习之三级菜单制作
2017/07/14 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
用canvas显示验证码的实现
2020/04/10 HTML / CSS
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
培训主管的职业生涯规划
2014/03/06 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
大国崛起英国观后感
2015/06/02 职场文书
婚宴来宾致辞
2015/07/28 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
MySQL GTID复制的具体使用
2022/05/20 MySQL