Edit report at https://bugs.php.net/bug.php?id=60954&edit=1

 ID:                 60954
 Comment by:         anon at anon dot anon
 Reported by:        aei at riga dot ahlers dot com
 Summary:            error_reporting() = 0?
 Status:             Open
 Type:               Bug
 Package:            PHP options/info functions
 Operating System:   Gentoo Linux (x86_64-3.1.7)
 PHP Version:        5.3.9
 Block user comment: N
 Private report:     N

 New Comment:

>Is there any particular reason why error_reporting() should return 0 if the 
statement that caused the error was prepended by the @ error-control operator?  

Well for one thing it's the quick 'n' dirty way to make the error handler 
function be quiet to implement the @ operator, and PHP usually chooses the 
quick 'n' dirty route.

I think it's right though. If you're @ing an expression, it's because you want 
to ignore errors in it. Such an error shouldn't be printed or logged except 
during debugging, because many PHP functions raise an error as part of their 
normal operation. Consider a call to fopen: Code is expected to look at the 
return value to see if the file opened successfully and handle it as necessary. 
In that case, it may not want the fopen error message to be printed/logged, 
since the user code may raise its own more specific error, or it might not be 
an error at all (if it was merely testing if the file could be opened in the 
given mode, or it can handle the intended file operation in another way).

Because @ applies to complete expressions (which can include calls of entire 
large functions and everything they do) it's sometimes too aggressive, in which 
case you'd want to disable @ by using a custom error handler function. Apart 
from that debugging case, when you can easily hard-wire an error reporting 
value into the handler function, you shouldn't really need to differentiate 
between the base error reporting value and the @ value. I'm curious why you 
want to.


Previous Comments:
------------------------------------------------------------------------
[2012-02-02 13:53:29] aei at riga dot ahlers dot com

Description:
------------
---
>From manual page: http://www.php.net/function.set-error-handler#refsect1-
function.set-error-handler-parameters
---

In the manual, it is written:

error_reporting() settings will have no effect and your error handler will be 
called regardless - however you are still able to read the current value of 
error_reporting and act appropriately. <b>Of particular note is that this value 
will be 0 if the statement that caused the error was prepended by the @ error-
control operator.</b>

Is there any particular reason why error_reporting() should return 0 if the 
statement that caused the error was prepended by the @ error-control operator?  
I mean, if errors are handled by a custom error handler callback set by 
set_error_handler(), there is currently no easy way to get current value of 
error_reporting(), right?  Because inside error handler callback function it 
may 
just return 0.  If we want to log or not log entries into a custom error log 
within this callback function depending on the setting of error_reporting, 
we're 
unable to do so in situations when '@' was used before the statement that 
caused 
error?  We could of course save value of error_reporting() in the beginning of 
our script to a global variable and use it from within the error call back 
function, but why?

Thanks,

Andrejs



------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=60954&edit=1

Reply via email to