2012-08-06 99 views
3

让说我有一个PHP类:继承及方法PARAMS PHP

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

,然后我继承了该类并重写doSomething方法

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

问:是不是不好的做法,改变,添加和删除方法参数? e.g:

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

感谢

+2

我会说这是重载方法的主要原因之一,让你改变它的签名。这当然是一种非常常见的做法,虽然这绝对不会使它成为好习惯 - 但我当然不认为它是真的,它只是“实践”。地狱,有一天,我们可能都会很好地为这些事情做好准备...... – DaveRandom 2012-08-06 21:13:59

回答

3

一般情况下,是的,它是坏的设计。它打破了设计对多态性OOP原则的坚持(或者至少削弱了它)......这意味着父接口的消费者将无法完全按照他们能够处理的实例来处理您的子类的实例父母。

做的是使一个新的语义命名的方法(在这种情况下,这意味着它传达了类似的含义,原来,一些提示,在参数是什么语义)

最佳件事要么调用原始,要不然在重写原始方法的实现中,用合理的默认值调用新的方法。

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

    public function doSomethingWithOptions($optsParam) { 
    parent::doSomething(); 
    // ... 
    } 
}