PHP中的方法重载是不好的做法?

时间:2017-10-04 15:21:11

标签: php overloading

尝试使用PHP实现method overloading(不要与来自PHP manual的重载定义混淆),并不容易有明显的权衡,因为PHP的本质是你必须有一个方法和内部的ifswitch语句提供重载,它会创建在长方法中难以阅读的过程代码。

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

}

1 个答案:

答案 0 :(得分:3)

传统方法是:

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

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

请注意参数的相同功能名称

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

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

免责声明:虽然你可以这样做,但我不推荐它。哎呀,如果你愿意,你可以做任何事情。这并不意味着你应该这样做。