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);

the "@" will close any php errors and notices
Erkan Özkök

Odpowiedzi:


214

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


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


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.