首頁  >  文章  >  後端開發  >  PHP用func_get_args和func_num_args函式實作函式重載方法

PHP用func_get_args和func_num_args函式實作函式重載方法

巴扎黑
巴扎黑原創
2017-05-23 16:10:581131瀏覽

學習php的朋友都知道php本身是沒有函數重載這一說的,更沒說像java,c那樣使用方法,但如果我們深入了解一下會發現可以在php中使用func_get_args()和func_num_args ()函數實作函數重載,下面來舉兩個函數重載範例.這兩個函數實作函數的重載.

#1、預設參數,如果一個函數裡面,這不是必須參數,而加入對應的預設值,就可以完成對應的功能,程式碼如下:

程式碼如下:

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

利用函數func_get_args()和func_num_args(),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==&#39;overloadFun&#39;)  
  {  
   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();  
$test->overloadFun()."<br />".   
$test->overloadFun(1)."<br />".   
$test->overloadFun(1,2)."<br />";  
?>

有了這樣的方法之後我們就可以利用它們來實現簡單函數重載了,但有一點要註明的是php 作為一種弱類型語言,本身不能像強類型如java,c++那樣,直接的實現重載,至少現在不可以以後版本會不會有我們不知道.

以上是PHP用func_get_args和func_num_args函式實作函式重載方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn