У меня есть public function beforeDelete () почти в каждом классе CMS. К сожалению, некоторые умные люди до меня создали некоторых из них с ($rowId)
param и некоторые из них без параметров вообще.
родитель Main_Admin_Module
имеет пустое объявление функции вроде этого:
public function beforeDelete() {}
но из-за этого я получаю ошибки лайк
ERR: объявление Model_EshopCategories :: beforeDelete () должно быть
совместим с этим из Admin_Module_Main :: beforeDelete ()
потому что (очевидно) объявление с ($rowId)
не совместим с (empty)
один.
К сожалению, это предотвращает ответы Json, поскольку тело ответа содержит ошибку и поэтому повреждено, поэтому я хочу исправить это.
У меня вопрос: могу ли я просто избавиться от родительского метода или мне нужно переписать каждого потомка до удаления, чтобы это исправить? Я пытался сделать ($rowId = null)
в родительском методе, и это не сработало.
Мне кажется, что базовый метод — это ненужное бремя, поскольку он ничего не делает и обеспечивает соблюдение правил, которым не могут следовать все подклассы. Особенно, если он вызывается с разными параметрами при разных обстоятельствах, этот метод не должен быть частью общего API Admin_Module_Main
учебный класс.
Мое предложение будет удалить beforeDelete()
метод из Admin_Module_Main
,
Альтернативой, которая не требует удаления базового метода, было бы пройти через каждый подкласс Admin_Module_Main
и сделать параметры необязательными (плюс код, который обрабатывает значение по умолчанию в необязательном параметре). Это может быть лучшим решением, если вы не знаете всего о вызывающих beforeDelete()
метод.
Одним из решений, позволяющих избежать этой ошибки, если вы не хотите исправлять код во всех классах, является изменение уровня error_reporting. Перейдите к вашей конфигурации php.ini и обновите error_reporting таким образом, как.
error_reporting = E_ALL & ~E_STRICT
или сделать в коде
error_reporting(E_ALL ^ E_STRICT);
Уровень E_STRICT — причина, по которой вы видите это сообщение об ошибке.