php重载问题-伪重载

http://www.livingelsewhere.net/2009/11/24/php-%E4%BC%AA%E9%87%8D%E8%BD%BD/

先记下来

 

<? php
// 今天在看书的时候,发现书上有这么一条:函数重载的替代方法————伪重载
//
//确实,在PHP中没有函数重载这个概念,让很多时候我们无法进行一些处理,甚至有时候不得不在函数后面定义好N个参数
//在看到了func_get_arg,func_get_args,func_num_args,这三个函数的时候,你们是不是想起了什么?

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 (  '  '  );
test( 1 );
echo (  '  '  );
test( 1 , 2 );
echo (  '  '  );
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,职场,重载,休闲)