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 相关文章推荐
URL Rewrite的设置方法
Jan 02 PHP
php 禁止页面缓存输出
Jan 07 PHP
php中CI操作多个数据库的代码
Jul 05 PHP
初步介绍PHP扩展开发经验分享
Sep 06 PHP
详解php的魔术方法__get()和__set()使用介绍
Sep 19 PHP
带密匙的php加密解密示例分享
Jan 29 PHP
Codeigniter的dom类用法实例
Jun 26 PHP
php基于websocket搭建简易聊天室实践
Oct 24 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
YII2框架中behavior行为的理解与使用方法示例
Mar 13 PHP
PHP const定义常量及global定义全局常量实例解析
May 28 PHP
PHP数组访问常用方法解析
Sep 05 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
摩卡咖啡
2021/03/03 咖啡文化
html中select语句读取mysql表中内容
2006/10/09 PHP
php Http_Template_IT类库进行模板替换
2009/03/19 PHP
php+ajax实现仿百度查询下拉内容功能示例
2017/10/20 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
window.name代替cookie的实现代码
2010/11/28 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
javascript发送短信验证码实现代码
2015/11/12 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
在VUE style中使用data中的变量的方法
2020/06/19 Javascript
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
机器学习python实战之手写数字识别
2017/11/01 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
微信跳一跳游戏python脚本
2020/04/01 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
python如何以表格形式打印输出的方法示例
2019/06/21 Python
python自动生成model文件过程详解
2019/11/02 Python
Python 文件数据读写的具体实现
2020/01/24 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
python logging 日志的级别调整方式
2020/02/21 Python
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
运动会广播稿30字
2014/01/21 职场文书
特色蛋糕店创业计划书
2014/01/28 职场文书
施工安全汇报材料
2014/08/17 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书