Переопределение методов торта в E_STRICT - PullRequest
0 голосов
/ 02 марта 2012

Какова лучшая практика в переопределении методов?Особенно, если нам нужно добавить еще один параметр?

Это не соответствует 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()

Я знаю, что не следует переопределять методы таким образом ( добавление-параметров-к-переопределению-методу-строгого наблюдения ).

но если нужно, как быпродолжить?(без необходимости удалять E_STRICT) Основная идея состояла в том, чтобы перехватывать обычные вызовы удаления без необходимости переписывать все вхождения этого вызова метода модели.

1 Ответ

1 голос
/ 02 марта 2012

Это либо E_STRICT совместимость, либо сигнатуры функций модификации. Вы не можете иметь оба.

Обычно решение состоит в том, чтобы использовать композицию вместо наследования, то есть обернуть объект, поведение которого вы хотите изменить, в новый класс с другими сигнатурами.

...