сам ПХП исключения не бросает (только некоторые новые экстеншены).
Поэтому надо бросать самому (примерно так как ты описал во втором примере).
Еще есть грязный хак :
function my_error_handler($severity, $message, $filename, $lineno) {
throw new MyException($message, 0, $severity, $filename, $lineno);
}
set_error_handler(\'my_error_handler\');