Есть несколько типов ошибок, которые нельзя перехватывать с помощью обработчика (как ты хочешь), к ним относятся в основном ошибки синтаксиса. Я точно не знаю, относятся ли к ним ошибки уровня типизации, но думаю что да. Другими словами такого рода ошибки нельзя обработать корректно завершив программу, можно разве что записать инфу о них в какой нить лог или что то вроде того с помощью функции register_shutdown_function, но скрипт все равно будет убит.