By and large, you should write code which doesn't generate notices at all during normal operation.
Usually the way of doing this is by judicious use of (e.g.) isset(), but also occasional careful use of "@" operator (Beware: never call functions with @).
Having error_reporting set to 0 (which is what @ does temporarily) is very dangerous and annoying, because it disables all error reporting, including fatals.
Therefore if a fatal occurs, the script terminates unceremoniously with no error, and there's no easy way of finding out what the problem was.
In my opinion, PHP should not allow you to mask fatals; it is of absolutely no practical value.
Specifically, either a function or method call generates a fatal if that function / method is not defined - but this happens at runtime not compile time, so it will only occur if that code is actually hit.
I normally run all my applications with an error handler which terminates the script and logs the error, for all non-masked errors including E_NOTICE. This helps to detect errors early and prevent PHP from "charging headlong into oblivion" under unexpected conditions, e.g. if an expected POST parameter is missing, it will fail the script rather than proceeding with an undefined value.
Mark