PHP的伪重载

来源:互联网 发布:js slice不传参数 编辑:程序博客网 时间:2024/06/11 23:06

<?php


  4//今天在看书的时候,发现书上有这么一条:函数重载的替代方法————伪重载
  5//
  6//确实,在PHP中没有函数重载这个概念,让很多时候我们无法进行一些处理,甚至有时候不得不在函数后面定义好N个参数
  7//在看到了func_get_arg,func_get_args,func_num_args,这三个函数的时候,你们是不是想起了什么?
  8//SO,let's try it..
  9
 10 function testOne ( $a )
 11 {
 12  echo'一个参数就这样' );
 13 }
 14
 15 function testTwo ( $a , $b)
 16 {
 17  echo'两个参数的就这样' );
 18 }
 19
 20 function testThree ( $a , $b , $c)
 21 {
 22  echo'黑黑,这是三个参数的' );
 23 }
 24
 25 function test ()
 26 {
 27  $argNum = func_num_args();
 28  //这一段其实可以用 $_arg = func_get_args() 来获得所有的参数,只是要用数组而已,不方便我下面的表达,呵呵
 29  for ( $i = 0$i < $argNum$i++ )
 30  {
 31   $_arg_{$i= func_get_arg$i );
 32  }
 33  switch ( $argNum )
 34  {
 35   case 1:
 36    testOne( $_arg_1 );
 37    break;
 38   case 2:
 39    testTwo( $_arg_1 , $_arg_2 );
 40    break;
 41   case 3:
 42    testThree( $_arg_1 , $_arg_2 , $_arg_3 );
 43    break;
 44   default:
 45    echo'这是没有参数的情况' );
 46    break;
 47  }
 48 }
 49
 50 /**
 51  * 例子的实现
 52  *
 53  */
 54 test();
 55 echo'<br>' );
 56 test(1);
 57 echo'<br>' );
 58 test(1,2);
 59 echo'<br>' );
 60 test(1,2,3);
 61
 62
 63
 64//这些只是在函数中的运用,其实最主要的还是在类中的运用
 65//如果这些用到类里面我就不需要担心构造函数是否有几个参数了,不是吗?
 66//类里面的运用只举一个简单的例子
 67
 68 class test
 69 {
 70  var $a = 0;
 71  var $b = 0;
 72
 73  function test ()
 74  {
 75   $argNum = func_num_args();
 76   $_arg = func_get_args();
 77   switch ( $argNum )
 78   {
 79    case 1:
 80     $this->test1( $_arg[0] );
 81     break;
 82    case 2:
 83     $this->test2( $_arg[0, $_arg[1]);
 84     break;
 85    default:
 86     $this->= 0;
 87     $this->= 1;
 88     break;
 89   }
 90  }
 91
 92  function test1 ( $a )
 93  {
 94   $this->= $a;
 95  }
 96
 97  function test2 ( $a , $b)
 98  {
 99   $this->= $a;
100   $this->= $b;
101  }
102 }
103
104
105?>

原创粉丝点击