3

假设我有一个 PHP 类:

class MyClass {
   public function doSomething() {
     // do somthing
   }
}

然后我扩展该类并覆盖该doSomething方法

class MyOtherClass extends MyClass {
   public function doSomething() {
     // do somthing
   }
}

问:更改、添加和删除方法参数是不好的做法吗?例如:

class MyOtherClass extends MyClass {
   public function doSomething($newParam) {
     // do somthing
     // do something extra with $newParam
   }
}

谢谢

4

1 回答 1

3

一般来说,是的,这是一个糟糕的设计。它打破了设计对多态性 OOP 原则的坚持(或至少削弱了它)......这意味着父接口的消费者将无法像对待您的子类的实例一样对待您的子类的实例父母。

最好的办法是创建一个新的语义命名方法(在这种情况下,语义意味着它传达了与原始方法相似的含义,并暗示了参数的用途),它要么调用原始方法,要么在您的覆盖实现中在原始方法中,使用合理的默认值调用您的新方法。

class MyOtherClass extends MyClass {
   public function doSomething() {
     return $this->doSomethingWithOptions(self::$soSomethingDefaultOptions);
   }

   public function doSomethingWithOptions($optsParam) {
     parent::doSomething();
     // ...
   }
}
于 2012-08-06T21:14:55.643 回答