我要重新聲明函數,像這樣:
class Name{
function a(){ something; }
function a($param1){ something; }
}
但它返回
Fatal error: Cannot redeclare Name::a()
在Java中它只是工作。我怎樣才能在PHP中做到這一點?
我要重新聲明函數,像這樣:
class Name{
function a(){ something; }
function a($param1){ something; }
}
但它返回
Fatal error: Cannot redeclare Name::a()
在Java中它只是工作。我怎樣才能在PHP中做到這一點?
使用默認參數:
class Name{
function a($param1=null){ something; }
}
如果沒有參數傳遞給Name::a()
它會分配一個$參數1有null
值。所以基本上傳遞該參數成爲可選。如果你需要知道,如果它有一個值,或者不是你可以做一個簡單的檢查:
if (!is_null($param1))
{
//do something
}
它是如此bredsive電纜... =(但是由於它的工作原理...! –
你會不會重新聲明的函數。相反,您可以通過爲其分配默認值來使參數可選。像這樣:
function a($param1 = null){ something; }
不幸的是,PHP不支持像Java那樣的方法重載。看一看這這裏的解決方案:PHP function overloading
所以func_get_args()
是要走的路:
功能參數不能唯一地識別功能。在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);
這回答解釋了它相當漂亮:http://stackoverflow.com/a/4697712/1606729 – koopajah