"красиво выводить пользователю" надо не исключения, а абстрактный текст "что-то пошло не так". А само исключение должно логироваться. А так же выводиться для программиста в режиме разработки.
Если сообщение надо вывести пользоваелю, то это не исключение. Вот пример нормального (хотя и с минимальной функциональностью
PHP exception handler-a
Другое дело что код здесь какой-то странный, и непонятно, как он вообще работает. Почему this? Это вызов внутри метода класса? Что за странная идея устанавливать обработчик ошибок внутри класса? Почему вообще обработчик ошибок устанавливается в каком-то пользовательском классе? А если будет класс Товар - у него тоже будет свой глобальный обработчик ошибок? Зачем бросать исключение если данные введены неверно?
А, главное, какой смысл пихать ошибку в переменную? Что с ней потом делать? Солить на зиму? И да, как правильно написал OnlyMyQuestion, это не будет работать.
Ох. Не посмотрел на юзернейм сначала. Все зря значит писал. Не дойдет.
А жаль. Вопрос-то очень хороший, если его с умом задать.