2010-08-08 52 views
2

函數重載可能在php.If是的,那麼如果不是,那麼爲什麼?php中的函數重載

在此先感謝。

我已經檢查了php手冊,它給出了重載的解決方案,因爲mail()函數可以被mb_mail()函數重載。

但是,這是超載

+3

你打算在PHP中使用函數重載完成什麼? – BoltClock 2010-08-08 12:30:55

回答

3

不是,因爲它還沒有實施。有一個PECL擴展允許你這樣做,但它使你的代碼不能移植到這個擴展不可用的環境中。

不要問爲什麼它沒有實現。

由於PHP 5.3,你可以使用命名空間爲「種」超載

namespace MyNamespace; 

function mail() { 
    return \mail(); 
} 
1

這隻能在內部完成(通過PHP擴展),除非你安裝PECL runkit extension,它公開函數重載功能,用戶空間的正確方法。

但是,您可能不希望在生產環境中使用runkit,因此沒有從用戶空間執行此操作的好方法。

+0

在你看來,如何實現函數超載 – 2010-08-08 12:28:44

+0

@Ankur你爲什麼需要它?你不能把這個函數換成另一個嗎? – Artefacto 2010-08-08 12:35:16

+0

@Ankur你看過他的回答了嗎? – 2010-08-08 12:49:07

0

我是新的PHP ..所以不知道這些擴展上面提到..但最近我看到過載的方法功能在PHP(有點)..

傳統的函數重載不支持在PHP中,因爲你不能在php中有多個相同名稱的函數..但你可以使用一個單一的函數,可以採取多個參數..已知作爲變量函數(http://en.wikipedia.org/wiki/Variadic_function

function show() 
{ 
    $data = ""; 
    $arr = func_get_args();  //Returns an Array of arguments passed 

    for($a = 0 ; $a < func_num_args() ; $a++) // func_num_args returns number of arguments passed .. you can also use count($arr) here 
    { 
     $data .= $arr[$a]; 
    } 

    echo $data, "<br>"; 
} 

show("Hey","Hii","Hello"); 
show("How Are You"); 

這裏..我已經通過了可變參數的函數,並追加他們每個人在一個字符串..
ofcourse包括字符串是沒有必要的..你可以簡單地echo $ ARR數組內容的循環中..希望幫助..!