Как известно, исключения кидать в __toString() PHP запрещает. Выглядит это не очень-то логично, но запрещено не просто так. Вообще __toString() — штука крайне нестабильная и сложная в отладке.
Оказалось, что исключение в __toString() выкинуть всё-таки можно при помощи своего обработчика ошибок и приведёт это довольно неожиданным результатам.