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

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

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

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

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

  1. function rewrite() {
  2. $args = func_get_args();
  3. if(func_num_args() == 1) {
  4. func1($args[0]);
  5. } else if(func_num_args() == 2) {
  6. func2($args[0], $args[1]);
  7. }
  8. }
  9. function func1($arg) {
  10. echo $arg;
  11. }
  12. function func2($arg1, $arg2) {
  13. echo $arg1, ' ', $arg2;
  14. }
  15. rewrite('PHP'); //调用func1
  16. rewrite('PHP','China'); //调用func2

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

  1. function test($name="小李",$age="23"){
  2. echo $name." ".$age;
  3. }
  4. test();
  5. echo "<br/>";
  6. test("a");
  7. echo "<br/>";
  8. test("a","b");

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

  1. <?php
  2. class OverLoad{
  3. function __call($name, $args)
  4. {
  5. if($name=='overloadFun')
  6. {
  7. switch(count($args))
  8. {
  9. case 0: $this->overloadFun0();break;
  10. case 1: $this->overloadFun1($args[0]); break;
  11. case 2: $this->overloadFun2($args[0], $args[1]); break;
  12. default: //do something
  13. break;
  14. }
  15. }
  16. }
  17. function overloadFun0()
  18. {
  19. echo 0;
  20. }
  21. function overloadFun1($var1)
  22. {
  23. echo $var1;
  24. }
  25. function overloadFun2($var1,$var2)
  26. {
  27. echo $var1+$var2;
  28. }
  29. }
  30. $test=new OverLoad();
  31. //开源代码phpfensi.com
  32. $test->overloadFun()."<br />".
  33. $test->overloadFun(1)."<br />".
  34. $test->overloadFun(1,2)."<br />";
  35. ?>

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