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.