Re: use of @ operator to suppress errors

From: Date: Mon, 15 Mar 2004 13:33:30 +0000
Subject: Re: use of @ operator to suppress errors
References: 1 2 3 4  Groups: php.general 
Request: Send a blank email to php-general+get-180437@lists.php.net to get a copy of this message
Many Thanks Nikolay. It seems then that if I'm to avoid the NOTICE errors then isset() should be used as suggested earlier. Not the greatest solution but a working one. Thanks to all. Ben ----- Original Message ----- From: "Nikolay Bachiyski" <nbachiyski@developer.bg> To: "Ben Joyce" <ben@babelfish.co.uk> Sent: Monday, March 15, 2004 2:32 PM Subject: Re: [PHP] use of @ operator to suppress errors > ----- Original Message ----- > From: Ben Joyce <ben@babelfish.co.uk> > To: <php-general@lists.php.net> > Sent: Monday, March 15, 2004 2:04 PM > Subject: Re: [PHP] use of @ operator to suppress errors > > > > Hmm. I'm confused. > > > > This page... > > > > http://uk.php.net/manual/en/language.operators.errorcontrol.php > > > > ...says that you can prepend the @ operator to a variable. So with > > @$_GET['this'] it should suppress the NOTICE error if 'this' > > doesn't > exist. > > > > I've done some testing: > > > > Test #1 > > > > error_reporting(E_ALL); > > echo $_GET['test']; > > > > This generates an on-screen error. > > > > Test #2 > > > > error_reporting(E_ALL); > > echo @$_GET['test']; > > > > The error is suppressed. > > > > If I elect to use a custom error handler then i always get an error > > generated. It makes no difference what the error level is or whether I > use > > the @ operator. > > > > set_error_handler("CustomErrorHandler"); > > error_reporting(E_ALL); > > echo @$_GET['test']; > > > > set_error_handler("CustomErrorHandler"); > > error_reporting(0); > > echo @$_GET['test']; > > > > set_error_handler("CustomErrorHandler"); > > error_reporting(E_ALL); > > echo $_GET['test']; > > > > set_error_handler("CustomErrorHandler"); > > error_reporting(0); > > echo $_GET['test']; > > > > They all have the same result. > > > > I suppose I could handle this in my error handling function, ignoring any > > NOTICE errors, but ideally I'd like to leave it as-is and suppress them > when > > referencing. > > > > I'm not sure if I'm making much sense. Any help appreciated! > > > > Cheers, > > > > Ben > > > > ----- Original Message ----- > > From: "Stuart" <lists@sharedserver.net> > > To: "Ben Joyce" <ben.php-general@babelfish.co.uk> > > Cc: <php-general@lists.php.net>; <rich@launchcode.co.uk> > > Sent: Monday, March 15, 2004 12:11 PM > > Subject: Re: [PHP] use of @ operator to suppress errors > > > > > > > Ben Joyce wrote: > > > > i'm using error_reporting(0) and > > > > set_error_handler("MyErrorHandler") > to > > > > manage my errors but I'm getting situations where a NOTICE error is > > thrown. > > > > > > > > For example if I refer to $_GET['this'] when there is no > > > > 'this' > > querystring > > > > key then i get the error. > > > > > > > > I've tried using @$_GET['this'] but it makes no difference. > > > > > > > > Is this normal? > > > > > > Yes it is. When you use set_error_handler all errors, warnings and > > > notices cause your handler to be called. To detect the use of the @ > > > prefix check the value of error_reporting in your handler - it will be 0 > > > if @ has been used. > > > > > > Richard Davey wrote: > > > > Yes because @ suppresses the errors on function calls, not variables > > > > (which is all $_GET['this'] is). > > > > > > On the contrary, the @ prefix suppresses all errors for the block of > > > code it precedes where a block is a function or variable. Essentially it > > > sets error_reporting to 0 while it evaluates that block. > > > > > > -- > > > Stuart > > > > > > -- > > > PHP General Mailing List (http://www.php.net/) > > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > > > > -- > > PHP General Mailing List (http://www.php.net/) > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > > > When you are using set_error_handler, the standart PHP error handler is > completely bypassed. Both the error_reporting value (saved in php.ini and > set by the error_reporting() function) and the @ operator will have no > effect onto your handler. Actually the @ error-control operator just sets > error_reporting to 0 while the expression to which it is prepeneded is > interpreted. > > Of course you still could fit your handler to use the error_reporting value > and take the appropriate action. > > Regards, > Nikolay >

« previous php.general (#180437) next »