PHP中的方法重载是一种糟糕的做法?

PHP中的方法重载是一种糟糕的做法?,php,overloading,Php,Overloading,尝试使用PHP实现(不要与中的重载定义相混淆)并不容易,因为PHP的本质是必须有一个方法和如果或switch语句内部提供重载,它会创建难以在长方法中读取的过程代码 在PHP中使用方法重载有什么好处吗?可以用其他方法实现吗 class MyClass { public function doMany($input) { if (is_array($input)) { ... } else if (is_float($input)) {

尝试使用PHP实现(不要与中的重载定义相混淆)并不容易,因为PHP的本质是必须有一个方法和
如果
switch
语句内部提供重载,它会创建难以在长方法中读取的过程代码

在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) {
      ...
   }

}

传统的做法是:

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

  public function doStuff(float $a) {
    // return other stuff
  }
}
请注意,相同的函数名与参数的类型不同

如果您想在php中模拟重载,第一种方法通常是要走的路。一般来说,在PHP中不需要重载,因为它是松散类型的,根据定义,不可能有重载


回答你的问题。如果您确实需要重载,那么您的第一种方法似乎是合适的。使用开关使其更具可读性


免责声明:虽然你可以这么做,但我不建议你这么做。见鬼,如果你愿意,你可以做任何事。这并不意味着你应该这样做。

传统的方法是:

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

  public function doStuff(float $a) {
    // return other stuff
  }
}
请注意,相同的函数名与参数的类型不同

如果您想在php中模拟重载,第一种方法通常是要走的路。一般来说,在PHP中不需要重载,因为它是松散类型的,根据定义,不可能有重载


回答你的问题。如果您确实需要重载,那么您的第一种方法似乎是合适的。使用开关使其更具可读性


免责声明:虽然你可以这么做,但我不建议你这么做。见鬼,如果你愿意,你可以做任何事。这并不意味着你应该这样做。

我觉得这个问题很宽泛,也很有见解。可能更多的是关于这个主题,但首先要仔细阅读他们的常见问题。如果您能够描述您试图解决的更具体的问题,您可能会得到更好的响应-很难给出适用于方法重载的每种可能使用的替代方法。如果您不想使用
开关
,请结合使用
gettype()
通过为每种类型的单个方法调用动态定义方法名称,我觉得这个问题非常广泛,而且非常有观点基础。可能更多的是关于这个主题,但首先要仔细阅读他们的常见问题。如果您能够描述您试图解决的更具体的问题,您可能会得到更好的响应-很难给出适用于方法重载的每种可能使用的替代方法。如果您不想使用
开关
,请结合使用
gettype()
为每个类型的单个方法调用动态定义方法名称,您无法重新声明doStuff。我想你可能不是想暗示“传统方法”块中的代码可以在PHP中工作,但是指定它会导致致命错误可能是个好主意。我指的是硬类型语言中的传统方法。是的,这会造成致命的后果。你不能让雷德克莱尔·多斯塔夫。我想你可能不是想暗示“传统方法”块中的代码可以在PHP中工作,但是指定它会导致致命错误可能是个好主意。我指的是硬类型语言中的传统方法。是的,它会带来致命的后果。