好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP利用func_get_args()和func_num_args()函数实现函数重

PHP利用func_get_args()和func_num_args()函数实现函数重载

学习php的朋友都知道php本身是没有函数重载这一说的更没说像java,c那样使用方法,但如果我们深入了解一下会发现要吧在php中使用func_get_args()和func_num_args()函数实现函数重载,下面来举两个函数重载例子.这两个函数实现函数的重载.

1、默认参数,如果一个函数里面,对不是必须参数,添加相应的默认值,就可以完成相应的功能,代码如下:

function  overloadFun( $param1 ,  $param2  =  '1' , $param3  = true)  {    // do something    } 

利用函数func_get_args()和call_user_func_array(),PHP代码如下:

function  rewrite() {     $args  = func_get_args();     if (func_num_args() == 1) {     func1( $args [0]);     }  else   if (func_num_args() == 2) {     func2( $args [0],  $args [1]);     }     }         function  func1( $arg ) {     echo   $arg ;     }         function  func2( $arg1 ,  $arg2 ) {     echo   $arg1 ,  ' ' ,  $arg2 ;     }         rewrite( 'PHP' );  //调用func1      rewrite( 'PHP' , 'China' );  //调用func2    

2.使用默认值,从而根据输入,得到自己想要的结果,代码如下:

function  test( $name = "小李" , $age = "23" ){    echo   $name . "  " . $age ;    }        test();    echo   "<br/>" ;    test( "a" );    echo   "<br/>" ;    test( "a" , "b" ); 

3.利用__call($name, $arg) 函数进行处理,代码如下:

<?php         class  OverLoad{      function  __call( $name ,  $args )     {     if ( $name == 'overloadFun' )    {      switch ( count ( $args ))     {       case  0:  $this ->overloadFun0(); break ;       case  1:  $this ->overloadFun1( $args [0]);  break ;       case  2:  $this ->overloadFun2( $args [0],  $args [1]);  break ;       default :  //do something          break ;     }    }     }           function  overloadFun0()     {     echo  0;     }           function  overloadFun1( $var1 )     {     echo   $var1 ;     }        function  overloadFun2( $var1 , $var2 )     {         echo   $var1 + $var2 ;     }    }        $test = new  OverLoad();      //开源代码phpfensi测试数据       $test ->overloadFun(). "<br />" .       $test ->overloadFun(1). "<br />" .       $test ->overloadFun(1,2). "<br />" ;       ?> 

有了这样的方法之后我们就可以利用它们来实现简单函数重载了,但有一点要注明的是php 作为一种弱类型语言,本身不能像强类型如java,c++那样,直接的实现重载,至少现在不可以以后版本会不会有我们不知道.

查看更多关于PHP利用func_get_args()和func_num_args()函数实现函数重的详细内容...

  阅读:40次