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" <[EMAIL PROTECTED]>
To: "Ben Joyce" <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
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

Reply via email to