45 votes

Pourquoi il est impossible de lever une exception à partir de __toString() ?

Pourquoi il est impossible de lever une exception à partir de __toString() ?

class a
{
    public function __toString()
    {
        throw new Exception();
    }
}

$a = new a();
echo $a;

le code ci-dessus produit ceci :

Fatal error: Method a::__toString() must not throw an exception in /var/www/localhost/htdocs/index.php on line 12

On m'a indiqué http://php.net/manual/en/migration52.incompatible.php où ce comportement est décrit, mais pourquoi ? Y a-t-il des raisons de le faire ?

Peut-être que quelqu'un ici le sait ?

Sur la page de suivi des bogues, l'équipe de développement de php, comme d'habitude, ne dit rien, mais voir le manuel : http://bugs.php.net/50699

-1voto

user1633548 Points 6

J'ai trouvé une solution simple :

Il suffit de renvoyer quelque chose comme un type de non-chaîne dans __toString en cas d'erreur de conversion en chaîne : NULL, FALSE ou même Exception.

Cela provoquera une sortie comme celle-ci (dans php -a interactive SHELL) :

Catchable fatal error: Method MyClass::__toString() must return a string value in php shell code on line 1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X