Это не обычное исключение. Нехватка памяти - это аварийная ситуация, при которой скрипт завершается.
Но вы можете отловить ее при помощи
register_shutdown_function().
UPD: вот тут еще рекомендуют зарезервировать кусок памяти заранее, чтобы освободить ее когда поймаете ошибку
https://stackoverflow.com/questions/8440439/safely...
Но лучше по возможности подправить вашу func3, чтобы она освобождала память как только может.