57

I've seen function calls preceded with an at symbol to switch off warnings. Today I was skimming some code and found this:

$hn = @$_POST['hn'];

What good will it do here?

Peter Mortensen
  • 28,342
  • 21
  • 95
  • 123
Majid Fouladpour
  • 26,043
  • 19
  • 66
  • 124
  • possible duplicate of [Reference - What does this symbol mean in PHP?](http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – Quentin Dec 19 '11 at 16:22
  • 2
    @ is also know as an atpersand. – jofitz Feb 17 '15 at 09:46

4 Answers4

74

The @ is the error suppression operator in PHP.

PHP supports one error control operator: the at sign (@). When prepended to an expression in PHP, any error messages that might be generated by that expression will be ignored.

See:

Update:

In your example, it is used before the variable name to avoid the E_NOTICE error there. If in the $_POST array, the hn key is not set; it will throw an E_NOTICE message, but @ is used there to avoid that E_NOTICE.

Note that you can also put this line on top of your script to avoid an E_NOTICE error:

error_reporting(E_ALL ^ E_NOTICE);
Harmen
  • 20,974
  • 3
  • 52
  • 74
Sarfraz
  • 355,543
  • 70
  • 511
  • 562
11

It won't throw a warning if $_POST['hn'] is not set.

Tyson of the Northwest
  • 1,990
  • 2
  • 18
  • 33
7

All that means is that, if $_POST['hn'] is not defined, then instead of throwing an error or warning, PHP will just assign NULL to $hn.

SenorPuerco
  • 839
  • 2
  • 8
  • 18
3

It suppresses warnings if $_POST['something'] is not defined.

Peter Mortensen
  • 28,342
  • 21
  • 95
  • 123
Hydrino
  • 537
  • 3
  • 9