php函数重载的替代方法--伪重载详解

对于弱类型语言来说,PHP函数重载,并不像一般的OOP那样。而弱类型本来就不区分,所以无法通过这些来实现,但是,可以通过下面的方法来实现简单的

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

伪重载吧。

函数重载的替代方法-伪重载,下面看一个具体的实例代码。