Постараюсь объяснить.
Ошибка в ОО коде ведет к принудительному завершению выполнения, если ошибка не обрабатывается (The Diaper Pattern Stinks), это нужно для того, чтобы не оставлять в системе не обработанные ошибки. Вообще, если дать волю программистам, они никогда не будут смотреть в свойство $dir->error, а try..catch заставляет это делать, иначе бяда. Потому этот подход хоть и несколько страдает в читаемости в общем смысле, зато делает процесс обработки ошибок более строгим.