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

Rom*_*sov 1 php overloading

尝试使用PHP 实现方法重载(不要与PHP手册中的重载定义混淆),要进行明确的权衡是不容易的,因为PHP的性质,您必须在内部提供一种方法和/ ifswitch语句来提供重载,它会创建在长方法中难以阅读的过程代码。

在PHP中有方法重载是否有任何优势,可以通过其他任何方式实现吗?

class MyClass {

   public function doMany($input) {

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

   }

}
Run Code Online (Sandbox Code Playgroud)

与传统方法

class MyClass {

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

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

}
Run Code Online (Sandbox Code Playgroud)

And*_*rei 5

传统方法是:

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

  public function doStuff(float $a) {
    // return other stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,相同的函数名称只是参数的类型不同。

如果要在php中模拟重载,通常第一种方法是使用该方法。通常来说,由于PHP是松散类型的,因此您实际上并不需要在PHP中进行重载,并且根据定义,您实际上并不能进行重载。


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

免责声明:尽管您可以这样做,但我不建议这样做。哎呀,如果您愿意,您几乎可以做任何事情。这并不意味着你应该。

  • 您无法重新声明doStuff。我认为您可能并不意味着暗示“传统方法”块中的代码将在PHP中运行,但是指定它将导致致命错误可能是一个好主意。 (4认同)