Page 1 sur 1

Utilisation d'une fonction finale héritée

Posté : 17 août 2010, 17:07
par Arkenis
Bonjour,

Alors que je lisais un cours sur les exceptions, je me suis arreté sur un code que je ne comprenais pas:
<?php
    class MonException extends Exception
    {
        public function __construct ($message, $code = 0)
        {
            parent::__construct ($message, $code);
        }
        
        public function __toString()
        {
            return $this->message;
        }
    }
    
    function additionner ($a, $b)
    {
        if (!is_numeric ($a) OR !is_numeric ($b))
            throw new MonException ('Les deux paramètres doivent être des nombres'); // On lance une exception "MonException"
        
        if (func_num_args() > 2)
            throw new Exception ('Pas plus de deux arguments ne doivent être passés à la fonction'); // Cette fois-ci, on lance une exception "Exception"
        
        return $a + $b;
    }
    
    try // On va essayer d'effectuer les instructions situées dans ce bloc
    {
        echo additionner (12, azerty), '<br />';
        echo additionner (15, 54, 45), '<br />';
    }
    
    catch (MonException $e) // On va attraper les exceptions "MonException" s'il y en a une qui est levée
    {
        echo '[MonException] : ', $e; // On affiche le message d'erreur grâce à la méthode __toString que l'on a écrite
    }
    
    catch (Exception $e) // Si l'exception n'est toujours pas attrapée, alors on va essayer d'attraper l'exception "Exception"
    {
        echo '[Exception] : ', $e->getMessage(); // La méthode __toString() nous affiche trop d'informations, on veut juste le message d'erreur
    }
    
    echo '<br />Fin du script'; // Ce message s'affiche, ça prouve bien que le script est exécuté jusqu'au bout
?>
A la l'instruction du premier bloc catch
echo '[MonException] : ', $e; // On affiche le message d'erreur grâce à la méthode __toString que l'on a écrite
Je ne comprend pas pourquoi on ne peut écrire
echo '[MonException] : ', $e->getMessage();
Puisque la classe MonException hérite de Exception, elle devrait contenir la méthode getMessage non ?

Merci de bien vouloir m'éclairer,
Cordialement.

Re: Utilisation d'une fonction finale héritée

Posté : 17 août 2010, 17:15
par stealth35
tu peux ecrire getMessage mais MonExecption a une méthode __toString qui te permet de faire direct echo $e (faire echo $e appelle __toString)

Re: Utilisation d'une fonction finale héritée

Posté : 17 août 2010, 18:36
par Arkenis
D'accord, donc ici le fait d'avoir réecrit la méthode __toString servait juste d'exemple pour le cours, ça n'a pas de réel interet de la surcharger si on peut obtenir le même résultat avec getMessage qui est déjà définie dans la classe Exception ?

Re: Utilisation d'une fonction finale héritée

Posté : 17 août 2010, 19:11
par stealth35
D'accord, donc ici le fait d'avoir réecrit la méthode __toString servait juste d'exemple pour le cours, ça n'a pas de réel interet de la surcharger si on peut obtenir le même résultat avec getMessage qui est déjà définie dans la classe Exception ?
exactement :wink:

Re: Utilisation d'une fonction finale héritée

Posté : 17 août 2010, 19:39
par Arkenis
Merci :)