当前位置:首页 > PHP教程 > php函数 > 列表

php中func_get_arg,func_get_args,func_num_args实现伪重载

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-15 16:12:36 浏览: 评论:0 

我们知道在PHP中没有函数重载这个概念,让很多时候我们无法进行一些处理,甚至有时候不得不在函数后面定义好N个参数只有使用func_get_arg,func_get_args,func_num_args实现伪重载了,下面一起来看看吧.

偶尔在网上看到关于php的伪重载的问题,有点兴趣便研究了一下,下面作者将说说php如何利用func_get_arg,func_get_args,func_num_args实现函数的伪重载问题.

首先说说方法重载的好处:

实现方法重载可以不用为了对不同的参数类型或参数个数,而写多个函数,多个函数用同一个名字,但参数表,即参数的个数或(和)数据类型可以不同,调用的时候,虽然方法名字相同,但根据参数表可以自动调用对应的函数,如果我们使用reflector去查看微软写的.net的基类库的话,我们可以发现他使用很多的方法重载,这样我们在调用的时候,就不需要记那么多的方法名称,而是知道了方法的功能就可以直接的给他传递不同的参数,编译器会明确的知道我们调用了哪一个方法.

但是在PHP中没有函数重载这个概念,让很多时候我们无法进行一些处理,甚至有时候不得不在函数后面定义好N个参数来解决相关问题,而php提供了几个函数,比如:func_get_arg,func_get_args,func_num_args 却可以直接解决相关问题,具体举个示例代码如下:

  1. <?php 
  2. function  testOne($a) { 
  3. echo ('一个参数就这样 '); 
  4. function testTwo($a$b) { 
  5.  echo ('两个参数的就这样 '); 
  6. function testThree($a$b$c) { 
  7.  echo ('呵呵,这是三个参数的 '); 
  8. }  //开源软件:phpfensi.com 
  9. function test() { 
  10.  $argNum = func_num_args(); 
  11.  // 这一段其实可以用 $_arg = func_get_args() 来获得所有的参数,只是要用数组而已,不方便我下面的表达,呵呵 
  12.  for ($i = 0; $i < $argNum$i++) { 
  13.   $_arg_{$i} = func_get_arg($i); 
  14.  } 
  15.  switch ($argNum) { 
  16.   case 1 : 
  17.    testOne($_arg_1); 
  18.   break ; 
  19.   case 2 : 
  20.    testTwo($_arg_1$_arg_2); 
  21.   break ; 
  22.   case 3 : 
  23.    testThree($_arg_1$_arg_2$_arg_3); 
  24.   break ; 
  25.   default : 
  26.    echo (' 这是没有参数的情况 '); 
  27.   break ; 
  28.  } 
  29. /** 
  30.  * 例子的实现 
  31.  */ 
  32. test(); 
  33. echo ('<br>'); 
  34. test(1); 
  35. echo ('<br>'); 
  36. test(1, 2); 
  37. echo ('<br>'); 
  38. test(1, 2, 3); 
  39. // 这些只是在函数中的运用,其实最主要的还是在类中的运用 
  40. // 如果这些用到类里面我就不需要担心构造函数是否有几个参数了,不是吗? 
  41. // 类里面的运用只举一个简单的例子 
  42. class test{ 
  43.  var $a = 0; 
  44.  var $b = 0; 
  45.  function test() { 
  46.   $argNum = func_num_args(); 
  47.   $_arg = func_get_args(); 
  48.   switch ($argNum) { 
  49.    case 1 : 
  50.     $this->test1($_arg[0]); 
  51.    break ; 
  52.    case 2 : 
  53.     $this->test2($_arg[0], $_arg[1]); 
  54.    break
  55.    default : 
  56.     $this->a = 0; 
  57.     $this->b = 1; 
  58.    break
  59.   } 
  60.  } 
  61.  function test1($a) { 
  62.   $this->a = $a
  63.  } 
  64.  function test2($a$b) { 
  65.   $this->a = $a
  66.   $this->b = $b ; 
  67.  } 
  68. ?> 

友情提示:

php的的func_num_args、func_get_arg和func_get_args都是返回函数实参相关的函数.

func_num_args:实参个数;

func_get_arg:返回某一个实参,必须事实参数组的索引;

func_get_args:返回实参数组;

Tags: func_get_arg func_get_args func_num_args

分享到: