Объявление дочернего метода должно быть совместимо с объявлением родительского метода в PHP 5.3.13

Я получаю следующую ошибку при запуске PHP 5.3.13 и не понимаю почему.

Объявление CustomCourse :: toArray () должно быть совместимо с объявлением BaseCourse :: toArray ()

Это мой PHP-код ниже, хотя он сокращен до важных вещей, чтобы длина сообщения оставалась только необходимой.

Я также должен добавить, что класс Course не предоставляет метода toArray.

Я вижу другие похожие темы на SO, но, похоже, ни одна из них не предлагает мне решения.

/**
* this is the CHILD class
*/
class CustomCourse extends BaseCourse {

   public function toArray() {
      $values = parent::toArray();
      // do some more with $values here
      return $values;
   }

}

/**
* this is the PARENT class
*/
class BaseContact extends Course {

   public function toArray($platform = GOLF_PLATFORM) {
      $values = array();
      $values['user_id'] = $this->getUserId();
      // do some more in here
      return $values;
   }

}

person crmpicco    schedule 20.05.2013    source источник
comment
@bcmcfc Проблема с этим ответом в том, что он не отвечает на мой вопрос (см. мой пост). Это childClass::customMethod() has different arguments, or a different access level (public/private/protected) than parentClass::customMethod(). ко мне не относится.   -  person crmpicco    schedule 20.05.2013
comment
это так - ваши два метода toArray () имеют разные сигнатуры: BaseCourse реализует toArray с параметром и значением по умолчанию, CustomCourse переопределяет его и не имеет параметра или значения по умолчанию, определенного в его сигнатуре.   -  person bcmcfc    schedule 20.05.2013
comment
Ваш дочерний класс не расширяет ваш родительский класс. Опечатка в вопросе? И почему вы думаете, что ссылка не отвечает на ваш вопрос? Вы только что приняли довольно точную копию такого ответа.   -  person Álvaro González    schedule 20.05.2013


Ответы (1)


Кажется, что это серьезная ошибка, о которой сообщает PHP.

Далее следует обсуждение: Объявление методов должно быть Совместимость с родительскими методами в PHP

Для разрешения вам нужно будет использовать одно и то же объявление для обоих методов.

class CustomCourse extends BaseCourse {
    function toArray($platform=GOLF_PLATFORM) {
        //do something
    }
}

Кроме того, вы можете отключить строгую проверку ошибок в файле php.ini.

person Achrome    schedule 20.05.2013
comment
Отключать ошибки - всегда плохая идея. - person Henrique Barcelos; 20.05.2013
comment
Отключение строгих ошибок избавляет от множества уведомлений. Предупреждения и фактические ошибки всегда должны быть включены. - person Achrome; 20.05.2013
comment
IMHO уведомления не отображаются зря. В этом случае концептуальная ошибка - объявлять метод в интерфейсе с одной подписью, а затем использовать другую в конкреции. Поскольку PHP не поддерживает перегрузку классических методов, подпись всегда должна быть одинаковой. Ваше первое предложение - это решение, скрытие ошибок НИКОГДА не является решением. - person Henrique Barcelos; 20.05.2013
comment
Я полностью согласен. Однако я не хотел давать такую ​​возможность. - person Achrome; 20.05.2013