什么是覆盖方法的最佳做法? 特别是如果我们需要添加另一个参数?
这不符合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) 基本思想是拦截正常的删除调用,而不必重写此模型方法调用的所有实例。
答案 0 :(得分:1)
它是E_STRICT
兼容性或modyfing函数签名。你不能兼得。
解决方案通常是使用组合而不是继承,即包装您想要在具有不同签名的新类中修改的对象。