2012-03-02 36 views
0

重写方法的最佳做法是什么? 特别是如果我们需要添加另一个参数?重写蛋糕方法E_STRICT

这是不符合E_STRICT(增加$柔软如第二PARAM):

public function delete($id, $soft = false, $cascade = true) { 
    if ($soft) { 
     return $this->_softDelete(); 
    } 
    return parent::delete($id, $cascade); 
} 

,导致:

Declaration of Conversation::delete() should be compatible with that of Model::delete() 

我知道,一个shoudn't重载方法这种方式(adding-parameters-to-overriden-method-e-strict-observation)。

但是如果有必要,将如何进行? (不必删除E_STRICT) 基本思想是拦截正常的删除调用,而不必重写此模型方法调用的所有实例。

+0

您是否尝试在AppModel中使用'beforeDelete'方法?也许这是一个覆盖核心'delete()'的好替代方案。 – 2012-03-02 12:51:33

+0

好吧,我的问题更通用一个(以上只是一个具体的用例作为例子)。在E_STRICT模式下发生此问题的代码中有很多其他地方。所以我必须以某种方式解决所有问题。 – mark 2012-03-02 13:07:06

回答

1

它或者是E_STRICT兼容性,或者是功能签名。你不能拥有两个。

解决方案通常是使用组合而不是继承,即在不同签名的新类中包装您想要修改的对象。