PHP des Normes Strictes: la Déclaration doit être compatible

J'ai le texte suivant de la hiérarchie de classes:

class O_Base {...}

class O extends O_Base {...}

abstract class A_Abstract {
    public function save(O_Base $obj) {...}
}

class A extends A_Abstract {
    public function save(O $obj) {
        echo 'save!';
    }
}

$o = new O;
$a = new A;

$a->save($o);

Lorsque j'exécute ce code, j'obtiens le message:

Des Normes strictes: Déclaration d'::save() doivent être compatibles avec
A_Abstract::save(O_Base $obj).php on line 21

Je sais à propos de E_STRICT niveau d'erreur mais je ne trouve pas (et comprendre) la raison de ce comportement. Quelqu'un peut-il m'aider?

En PHP, quand vous avez class Foo extends Bar, les méthodes de Foo, qui l'emportent Bar méthodes doivent avoir la même empreinte. L'exception est __construct(), qui peut avoir différentes empreinte.

OriginalL'auteur Alex | 2014-01-13