func_get_arg、func_get_args、func_num_args实现PHP伪重载
今天在看书的时候,发现书上有这么一条:函数重载的替代方法——伪重载
确实,在PHP中没有函数重载这个概念,让很多时候我们无法进行一些处理,甚至有时候不得不在函数后面定义好N个参数在看到了func_get_arg,func_get_args,func_num_args,这三个函数的时候,你们是不是想起了什么?
So,let's try it...
<?php
function testOne($a) {
echo ('一个参数就这样 ');
} function testTwo($a, $b) {
echo ('两个参数的就这样 ');
} function testThree($a, $b, $c) {
echo ('呵呵,这是三个参数的 ');
} function test() {
$argNum = func_num_args(); // 这一段其实可以用 $_arg = func_get_args() 来获得所有的参数,只是要用数组而已,不方便我下面的表达,呵呵
for ($i = 0; $i < $argNum; $i++) {
$_arg_{$i} = func_get_arg($i);
} switch ($argNum) {
case 1 :
testOne($_arg_1);
break ;
case 2 :
testTwo($_arg_1, $_arg_2);
break ;
case 3 :
testThree($_arg_1, $_arg_2, $_arg_3);
break ;
default :
echo (' 这是没有参数的情况 ');
break ;
}
} /**
* 例子的实现
*/
test();
echo ('<br>');
test(1);
echo ('<br>');
test(1, 2);
echo ('<br>');
test(1, 2, 3); // 这些只是在函数中的运用,其实最主要的还是在类中的运用
// 如果这些用到类里面我就不需要担心构造函数是否有几个参数了,不是吗?
// 类里面的运用只举一个简单的例子 class test
{
var $a = 0;
var $b = 0; function test() {
$argNum = func_num_args();
$_arg = func_get_args();
switch ($argNum) {
case 1 :
$this->test1($_arg[0]);
break ;
case 2 :
$this->test2($_arg[0], $_arg[1]);
break;
default :
$this->a = 0;
$this->b = 1;
break;
}
} function test1($a) {
$this->a = $a;
} function test2($a, $b) {
$this->a = $a;
$this->b = $b ;
}
}
?>
延伸阅读:
PHP函数call_user_func和call_user_func_array详解
func_get_arg、func_get_args、func_num_args实现PHP伪重载的更多相关文章
- php 函数func_get_args()、func_get_arg()与func_num_args()之间的区别
php经常会有一些看似相近的函数,然而区别很大.[func_get_arg(),func_get_args(),func_num_args()]的区别,我们先看一下,下面的实例代码 从上面的结果中我们 ...
- __call PHP伪重载方法
为了避免当调用的方法不存在时产生错误,可以使用 __call() 方法来避免.该方法在调用的方法不存在时会自动调用,程序仍会继续执行下去 该方法有两个参数,第一个参数 $function_name 会 ...
- 原生js函数的伪重载
一.我们在学习java的时候,其中方法有一个比较的重要的特性重载,根据传入的参数的个数来执行不同的方法,而方法其根据签名来判断,而JavaScript却不能根据方法的签名来进行重载,只能通过参数的个数 ...
- js函数的伪重载
这也是今天写东西是遇到的一个问题,导致我联想起了函数重载的问题. 在javascript中是没有函数重载机制的,对于用惯了java开发的同学可能就表示吃惊了,我屮艸芔茻,函数 没有重载?那怎么搞?!! ...
- func_num_args(),func_get_arg(),func_get_args()
<?php function testFunction1(){ return func_num_args(); } function testFunction2(){ return func_g ...
- php 函数func_get_args()、func_get_arg()与func_num_args()之间的比较
在PHP的官方文档上的个自定义如下: func_get_args():返回一个包含函数参数列表的数组. func_get_arg():返回指定的参数值. func_num_args():返回调用函数的 ...
- func_get_args func_num_args 的使用
func_get_args是获取方法中参数的数组,返回的是一个数组,与func_num_args搭配使用: func_num_args一般写在方法中,用于计数 function eeee($a='gg ...
- PHP收藏
PHP打印测试,PHP调试技巧 PHP header函数使用大全 PHP面向对象(OOP)编程入门教程 小片段: PHP保留2位小数 格式化小数.浮点数 header('Content-T ...
- GeSHi Documentation
GeSHi Documentation Version 1.0.8.11 Authors: © 2004 - 2007 Nigel McNie © 2007 - 2012 Benny Baumann ...
随机推荐
- 第38课 Qt中的事件处理(上)
1. GUI程序原理回顾 (1)图形界面应用程序的消息处理模型 (2)思考:操作系统发送的消息如何转变为Qt信号 2. Qt中的事件处理 (1)Qt平台将系统产生的消息转换为Qt事件 ①Qt事件是一个 ...
- unity 实现物体破碎效果的一些方法 - 细雨淅淅
游戏越来越接近现实的感觉,如果有一个真是的 虚拟现实设备,可能我们真的会感觉是在真实世界.场景的逼真是在渲染效果.角色AI.游戏逻辑.物理效果等等一起导致的结果.现在游戏越来越大,除了渲染,物理估计是 ...
- jdbcTemplate之jdbc模板技术
1:为什么要使用jdbcTemplate? 在实际开发中使用jdbc技术太过复杂,为了减少代码冗余,操作简单 步骤一:创建实体类 package beans; public class Book { ...
- TortoiseSVN 中 一个 Merge revisions to.. 小坑
注意: 不能只选头与尾svn号, 一定要全选 !!全选 !!全选 !!
- Linux下部署docker记录(0)-基础环境安装
以下是centos系统安装docker的操作记录 1)第一种方法:采用系统自带的docker安装,但是这一般都不是最新版的docker安装epel源[root@docker-server ~]# wg ...
- java并发编程学习: 阻塞队列 使用 及 实现原理
队列(Queue)与栈(Stack)是数据结构中的二种常用结构,队列的特点是先进先出(First In First Out),而Stack是先进后出(First In Last Out),说得通俗点: ...
- knockoutJS学习笔记01:从拼接字符串到编写模板引擎
开篇 关于knockout的文章,园里已经有很多大神写过了,而且都写得很好.其实knockout学习起来还是很容易的,看看官网的demo和园里的文章,练习练习就可以上手了(仅限使用,不包含研究源码). ...
- 如何修改Total Commander配件文件的位置
今天测试了一下Total Commander最新版的安装文件,测试完成后,并删除.结果导致原先一直在使用的绿色版的Total Comander配件文件变成了测试的配件文件,导致许多配置都丢失了,因此不 ...
- oracle 表字段添加 修改 删除语法
修改列名 alter table 表明 rename column rename 老列名 to 新列名添加 字段alter table 表名 add(字段名 类型):删除字段alter table 表 ...
- javascript闭包理解
//闭包理解一 function superFun(){ var _super_a='a'; function subfuc(){ console.log(_super_a); } return su ...