Ops, ho postato il codice sbagliato
Quello che non va e reso un po' più semplice è così:
Codice PHP:

class Foo {
    public 
$val;
    public function 
test(Foo $t) {
        return (
$this->val == $t->val);
    }
}


class 
Bar extends Foo {
    public 
$barVal;
    
//Questo non me lo accetta
    
public function test(Bar $t) {
        return (
parent::test()) && ($this->barVal == $t->barVal);
    }
}

//$f1 e $f2 di tipo Foo
$f1 = new Foo();
$f2 = new Foo();
$f1->test($f2);

//$b1 e $b2 di tipo Bar
$b1 = new Bar();
$b2 = new Bar();
$b1->test($b2);

//$f1 di tipo Foo e $b1 di tipo Bar
$f1->test($b1); 
In pratica non posso fare l'override del metodo test.
Il metodo test di Bar si aspetta un altro oggetto Bar come input perché in Foo non esiste la variabile $barVal.

Edit: corretto il codice