метод в дочернем классе, переопределенный в отличие от родительского класса, дает ошибку (строгие стандарты) - PullRequest
0 голосов
/ 18 мая 2011

Я получаю эту ошибку:

Декларация PayPal :: riseError () должна быть совместима с декларацией PEAR :: riseError ()

ЭтоPEAR :: riseError () и PayPal :: riseError () соответственно:

function &raiseError($message = null,
                     $code = null,
                     $mode = null,
                     $options = null,
                     $userinfo = null,
                     $error_class = null,
                     $skipmsg = false)
{


class PayPal extends PEAR
{
    function raiseError($message, $code = null)
    {
        return parent::raiseError($message, $code, null, null, null, 'PayPal_Error');
    }

Есть ли способ заставить его работать без изменения определений?

Я прочитал здесь о порядке загрузки класса.Может ли это быть проблемой?

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Проблема не имеет ничего общего с порядком загрузки классов.Поскольку PayPal расширяет PEAR, любая функция, которая будет принимать объект PEAR в качестве параметра, фактически может получить объект PayPal.А поскольку метод PEAR raiseError() допускает до семи параметров, метод PayPal также должен разрешать не менее семи параметров.

Наилучшим решением будет рефакторинг raiseError() в PayPal:

function raiseError($message = null,
                    $code = null,
                    $mode = null,
                    $options = null,
                    $userinfo = null,
                    $error_class = null,
                    $skipmsg = false)
{
    return parent::raiseError($message, $code, $mode, $options,
                              $userinfo, 'PayPal_Error', $skipmsg);
}
0 голосов
/ 18 мая 2011

Подпись (параметры) метода дочернего класса должна совпадать с родительским методом.Это связано с тем, что PHP не позволяет перегружать функции переменным количеством или типом параметров.

Вы всегда можете просто переименовать свой метод raiseError во что-то другое, например raiseErrorWrapper, чтобы обойти эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...