2017-10-04 55 views
1

試圖用PHP實現method overloading(不要與PHP manual的重載定義混淆),不容易有明顯的折衷,因爲PHP的性質你必須有一個方法並且ifswitch聲明裏面提供重載,它創建的程序代碼難以用長方法讀取。在PHP中重載方法是不好的做法?

在PHP中有方法重載有什麼好處,它可以以任何其他方式實現嗎?

class MyClass { 

    public function doMany($input) { 

     if (is_array($input)) { 
     ... 
     } else if (is_float($input)) { 
     ... 
     } 

    } 

} 

與傳統方法

class MyClass { 

    public function doArray(array $input) { 
     ... 
    } 

    public function doFloat(float $input) { 
     ... 
    } 

} 
+0

這個問題既感覺非常寬泛,也非常基於我的意見。它*可能會在https://softwareengineering.stackexchange.com/的主題上更多,但請首先仔細閱讀其常見問題解答。如果你可以描述一個你想要解決的更具體的問題,你可能會得到更好的答案 - 很難提供可能適用於方法重載的各種可能方案。 – IMSoP

+0

如果您不想使用'switch',那麼將'gettype()'與動態定義的方法名稱結合起來用於每種類型的單獨方法調用 –

回答

0

傳統的做法是:

class Aclass { 
    public function doStuff(int $a) { 
    // return other stuff 
    } 

    public function doStuff(float $a) { 
    // return other stuff 
    } 
} 

注意到同樣的函數名只是不同的PARAMATERS 類型

如果你想在PHP中模擬重載,你的第一種方法通常是要走的路。一般來說,你不需要在PHP中重載,因爲它的類型是鬆散的,根據定義,你不能真的有重載。


回答你的問題。如果你真的需要超載,那麼你的第一種方法似乎是適當的。使用開關使其更具可讀性。

聲明:雖然你可以做到這一點,但我不推薦它。哎呀,如果你願意,你可以做任何事情。這並不意味着你應該。

+1

您不能聲明doStuff。我想你可能並不是想暗示「傳統方法」塊中的代碼可以在PHP中工作,但是指定它會導致致命錯誤可能是個好主意。 –

+0

這是正確的,我並不打算在PHP中使用「傳統方法」。我指的是硬式語言中的傳統方法。是的,它會帶來致命的一擊。 – Andrew

相關問題