2013-01-16 112 views
2

可能重複:
php function overloadingPHP重新聲明函數象Java

我要重新聲明函數,像這樣:

class Name{ 
    function a(){ something; } 
    function a($param1){ something; } 
} 

但它返回

Fatal error: Cannot redeclare Name::a() 

在Java中它只是工作。我怎樣才能在PHP中做到這一點?

+0

這回答解釋了它相當漂亮:http://stackoverflow.com/a/4697712/1606729 – koopajah

回答

6

使用默認參數:

class Name{ 
    function a($param1=null){ something; } 
} 

如果沒有參數傳遞給Name::a()它會分配一個$參數1有null值。所以基本上傳遞該參數成爲可選。如果你需要知道,如果它有一個值,或者不是你可以做一個簡單的檢查:

if (!is_null($param1)) 
{ 
//do something 
} 
+0

它是如此bredsive電纜... =(但是由於它的工作原理...! –

4

你會不會重新聲明的函數。相反,您可以通過爲其分配默認值來使參數可選。像這樣:

function a($param1 = null){ something; } 
1

不幸的是,PHP不支持像Java那樣的方法重載。看一看這這裏的解決方案:PHP function overloading
所以func_get_args()是要走的路:

2

功能參數不能唯一地識別功能。在Java中,參數是嚴格定義的。這允許編譯器知道你正在調用哪個函數。

但是,在PHP中,情況並非如此。

function a() 
{ 
    $args = func_get_args(); 
    foreach($args as $value) 
    { 
     echo $value; 
    } 
} 

可以創建沒有參數定義但仍然傳遞參數的函數。

一個( 「你好」, 「世界」)

將輸出

的hello world

其結果是,PHP不能告訴之間的不同a()和($ arg)。因此,已經定義了a()。

PHP程序員有不同的做法來處理這個單一的功能問題。

您可以使用默認值定義參數。

a($ arg ='hello world');

您可以傳遞混合變量類型。我的首選是使用默認值的數組。它更加靈活。

function a($options=array()) 
{ 
     $default = array('setting'=>true); 
     $options = array_merge($default,$options); 
     .... 
} 

a(array('setting'=>false);