2017-10-04 52 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

相关问题