Salutations !

Je m'en viens vers vous car je ne trouve pas de solution à mon petit souci.
J'ai du mal comprendre un aspect de la notion d'héritage en objet et je me heurte à un petit mur que j'espère vous m'aiderez à franchir.

Voici le type de souci que j'ai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
class Animal
{
    public function Mouvement()
    {
        // script de mouvement
 
        // On rencontre un autre animal pendant le mouvement ? on lui dit bonjour
        echo $this->Bonjour($animal);
    }
    private function Bonjour($animal)
    {
        $texte = 'Bonjour '.get_class($animal);
        return $texte
    }
}
 
class Chat extends Animals
{
    private function Bonjour($animal)
    {
        $type = get_class($animal);
 
        switch($type)
        {
            case 'Chien':
                $texte = 'Le chat fuit, il a peur du chien';
                break;
            case default:
                $texte = 'Bonjour '.$type;
                break;
        }
        return $texte
    }
}
 
class Chien extends Animals
{
}
Quoi qu'il advienne si un chat rencontre un autre animal, c'est toujours la fonction Bonjour de la classe Animal qui est appelée et non pas celle qui la remplace dans Chat.

Où se situe mon erreur ?

Merci d'avance pour votre aide.

Edit :
Je viens de trouver une solution à mon souci à l'instant.
Mais est-ce la bonne méthode ?
Merci.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
class Animal
{
    public function Mouvement()
    {
        // script de mouvement
 
        // On rencontre un autre animal pendant le mouvement ? on lui dit bonjour
        $class = get_class($animal);
        echo $class::Bonjour($animal);
    }
    public function Bonjour($animal)
    {
        $texte = 'Bonjour '.get_class($animal);
        return $texte
    }
}
 
class Chat extends Animals
{
    public function Bonjour($animal)
    {
        $type = get_class($animal);
 
        switch($type)
        {
            case 'Chien':
                $texte = 'Le chat fuit, il a peur du chien';
                break;
            case default:
                $texte = 'Bonjour '.$type;
                break;
        }
        return $texte
    }
}
 
class Chien extends Animals
{
}