覆盖E_STRICT中的蛋糕方法

时间:2012-03-02 12:33:00

标签: php cakephp methods cakephp-2.0

什么是覆盖方法的最佳做法? 特别是如果我们需要添加另一个参数?

这不符合E_STRICT(将$ soft添加为第二个参数):

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()

我知道一个人不应该以这种方式覆盖方法(adding-parameters-to-overriden-method-e-strict-observation)。

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

1 个答案:

答案 0 :(得分:1)

它是E_STRICT兼容性或modyfing函数签名。你不能兼得。

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