2011-05-18 3 views
0

Je reçois cette erreur:méthode dans la classe des enfants redéfinie différent de la classe parente donne erreur (normes strictes)

Declaration of PayPal::raiseError() should be compatible with that of PEAR::raiseError()

Ce sont PEAR :: raiseError() et PayPal :: raiseError() respectivement :

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'); 
    } 

Une façon de le faire fonctionner sans modifier les définitions?

J'ai lu here à propos de l'ordre dans lequel les classes sont chargées. Est-ce que cela pourrait être le problème?

Répondre

2

Le problème n'a rien à voir avec l'ordre dans lequel les classes sont chargées. Puisque PayPal s'étend PEAR, n'importe quelle fonction qui prendrait un objet PEAR en tant que paramètre pourrait effectivement recevoir un objet PayPal. Et puisque la méthode PEARraiseError() permet jusqu'à sept paramètres, la méthode PayPal devrait également permettre au moins jusqu'à sept paramètres.

La meilleure solution serait de factoriser raiseError() dans 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

Merci, ça marche !, le seul détail vous avez oublié le « et » avant le nom de la méthode. Sans cela, l'erreur est la même. – ziiweb

0

La signature (paramètres) de la méthode de classe enfant doit être identique à la méthode parente. C'est parce que PHP n'autorise pas les fonctions de surcharge avec des nombres ou des types de paramètres variables.

Vous pouvez toujours renommer votre méthode raiseError pour quelque chose de différent, comme raiseErrorWrapper pour contourner ce problème.

Questions connexes