今天在看书的时候,发现书上有这么一条:函数重载的替代方法——伪重载

确实,在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伪重载的更多相关文章

  1. php 函数func_get_args()、func_get_arg()与func_num_args()之间的区别

    php经常会有一些看似相近的函数,然而区别很大.[func_get_arg(),func_get_args(),func_num_args()]的区别,我们先看一下,下面的实例代码 从上面的结果中我们 ...

  2. __call PHP伪重载方法

    为了避免当调用的方法不存在时产生错误,可以使用 __call() 方法来避免.该方法在调用的方法不存在时会自动调用,程序仍会继续执行下去 该方法有两个参数,第一个参数 $function_name 会 ...

  3. 原生js函数的伪重载

    一.我们在学习java的时候,其中方法有一个比较的重要的特性重载,根据传入的参数的个数来执行不同的方法,而方法其根据签名来判断,而JavaScript却不能根据方法的签名来进行重载,只能通过参数的个数 ...

  4. js函数的伪重载

    这也是今天写东西是遇到的一个问题,导致我联想起了函数重载的问题. 在javascript中是没有函数重载机制的,对于用惯了java开发的同学可能就表示吃惊了,我屮艸芔茻,函数 没有重载?那怎么搞?!! ...

  5. func_num_args(),func_get_arg(),func_get_args()

    <?php function testFunction1(){ return func_num_args(); } function testFunction2(){ return func_g ...

  6. php 函数func_get_args()、func_get_arg()与func_num_args()之间的比较

    在PHP的官方文档上的个自定义如下: func_get_args():返回一个包含函数参数列表的数组. func_get_arg():返回指定的参数值. func_num_args():返回调用函数的 ...

  7. func_get_args func_num_args 的使用

    func_get_args是获取方法中参数的数组,返回的是一个数组,与func_num_args搭配使用: func_num_args一般写在方法中,用于计数 function eeee($a='gg ...

  8. PHP收藏

    PHP打印测试,PHP调试技巧    PHP header函数使用大全    PHP面向对象(OOP)编程入门教程 小片段: PHP保留2位小数 格式化小数.浮点数 header('Content-T ...

  9. GeSHi Documentation

    GeSHi Documentation Version 1.0.8.11 Authors: © 2004 - 2007 Nigel McNie © 2007 - 2012 Benny Baumann ...

随机推荐

  1. Url和Uri的区别

    URL: URL是Uniform Resoure Locator(统一资源定位器)的缩写.就是WWW页的地址. 其URL地址格式排列为:scheme://host:Port/path其中 ·Inter ...

  2. 通过trie树实现单词自动补全

    /** * 实现单词补全功能 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #incl ...

  3. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 所有的基础数据都可以恢复删除

    客户的需求如下: 所有基礎信息需要記錄創建人,創建時間,更改人,更改時間,刪除人,刪除時間.有停用基礎信息功能(停用不是刪除,只是暫時停用).基礎信息可以查出已經刪除的信息(有選項可以選擇),有方法把 ...

  4. node基础11:接受参数

    1.接收参数 在Node中接受GET/POST请求的参数不像PHP那样,在PHP中直接有全局变量$_GET,$_POST来接受url,或者请求体重的参数. 在node中接受GET参数使用url.par ...

  5. C/C++实践笔记 006

    字符与字符串字符按照%d,打印ASCCII字符按%c,打印字符本身‘0’ 0 ‘\0’区别: char ch3=0; 等号会自动转换,转换成ASCCII值所对应的字符.即null或\0C字符串不可以直 ...

  6. ASP.NET MVC 必须设置 ErrorMessageString 或 ErrorMessageResourceName,但不能同时设置二者。

    解决方案: 1.此错误是指你的验证错误信息为空(required="")和required提示信息一致,引发的错误. 简单的来说就是两个验证错误提示消息一样了. 2.修改提示消息解 ...

  7. AOJ DSL_2_D Range Update Query (RUQ)

    Range Update Query 数列 A = {a0,a1 ,...,an−1} に対し.次の2つの操作を行うプログラムを作成せよ. update(s,t,x): as,as+1,...,at  ...

  8. 【Codefoces487E/UOJ#30】Tourists Tarjan 点双连通分量 + 树链剖分

    E. Tourists time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard inpu ...

  9. python下ssh的简单实现

    python下的ssh都需要借助第三方模块paramiko来实现,在使用前需要手动安装. 一.python实现ssh (1) linux下的ssh登录 root@ubuntu:~# ssh morra ...

  10. QQ等级表

    什么是QQ等级呢? 2003年,腾讯公司推出了QQ等级制度 . 最早是以小时,来计算的,那段时间,绝大部分QQ用户都在挂QQ,之后就有不少媒体指责其浪费能源,在有关部门的介入下,腾讯公司将QQ等级变为 ...