3

PHPクラスがあるとしましょう:

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

そして、そのクラスを拡張してdoSomethingメソッドをオーバーライドします

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

Q: メソッドのパラメーターを変更、追加、または削除するのは悪い習慣ですか? 例えば:

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

ありがとう

4

1 に答える 1

3

一般的に、はい、それは悪いデザインです。これは、ポリモーフィズムの OOP 原則に対する設計の遵守を破ります (または少なくとも弱体化させます)...つまり、親インターフェイスの消費者は、子クラスのインスタンスを、インスタンスを処理できるのとまったく同じように処理できなくなります。親。

最善の方法は、元のメソッドを呼び出すか、オーバーライドされた実装で、新しい意味的に名前が付けられたメソッドを作成することです (この場合、セマンティックとは、元のメソッドと同様の意味を伝えることを意味し、param の目的に関するヒントがあります)。元のメソッドの、適切なデフォルトで新しいメソッドを呼び出します。

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

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