Znak @ przed wywołaniem funkcji

138

Jaka jest różnica między tymi dwoma wywołaniami funkcji w PHP?

init_get($somevariable);

@init_get($somevariable);
nixie
źródło
the "@" will close any php errors and notices
Erkan Özkök

Odpowiedzi:

214

the "@" will silence any php errors your function could raise.

solidgumby
źródło
But what if you put @ in front of PHP's trigger_error function? I have seen that in some code, but its behavior is inconsistent for me so far. In some cases, I do see the error being reported by the configured error handler and in other cases it does seem to get reported.
fritzmg
2
The @ will temporarily set error_reporting to 0 but will not "suppress" the error.
solidgumby
37

As already answered the @ will stop the error (if any) from showing up.
In terms of performance this is not recommended.

What php is doing is:

  • reading the error display state
  • setting the error display to show no errors
  • running your function
  • setting the error display to it's previous state

If you don't want any errors showing up use error_reporting(0);.

Or just write bug free code :P

AntonioCS
źródło
Prefer to put zero, but if that works, great didn't know about it :)
AntonioCS
1
What about functions that you do not control, like mail for example? Which other options exist? I am using @ right now, but would be great to be able to do in different way
spuas
6

As everyone said, it stops the output of errors for that particular function. However, this decreases performance greatly since it has to change the error display setting twice. I would recommend NOT ignoring warnings or errors and fixing the code instead.

Daniel Sorichetti
źródło
Thanks to all for your answers. That code is not mine, I was only looking at the phpBB code for curiosity, so I have no problems of performance. :) Thanks again.
nixie