Yes, it's because that's what error_reporting(0) is designed to do.
It will effectively mask and hence ignore ANY ERROR. A page which has a fatal error will silently die, and there's no easy way of finding out how far it got before it died, or what the error was.
Never, ever use error_reporting(0). It's bad. In fact, I'd go so far as saying error_reporting(0) is a bug in PHP - it should not be allowed.
Likewise, the @ operator (which temporarily does error_reporting(0)) is a recipe for disaster - mitigated only by the fact that it applies to a smaller part of your program.
error_reporting(E_ALL) or greater should be used at all times. Your error handling should report and log as much information as possible if ANY error, warning or notice occurs, even in production. This information is vital to diagnosing problems and should not be ignored.
Mark