'At' symbol before variable name in PHP: @$_POST

PhpError HandlingOperators

Php Problem Overview


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?

Php Solutions


Solution 1 - Php

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

Solution 2 - Php

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

Solution 3 - Php

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.

Solution 4 - Php

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

Solution 5 - Php

I'm answering 11 years later for completeness regarding modern php.

Since php 7.0, the null coalescing operator is a more straightforward alternative to silencing warnings in that case. The ?? operator was designed (among other things) for that purpose.

Without @, a warning is shown:

$ php -r 'var_dump($_POST["hn"]);'
PHP Warning:  Undefined array key "hn" in Command line code on line 1
NULL

The output with silencing warnings (@):

$ php -r 'var_dump(@$_POST["hn"]);'
NULL

Obtaining the same result with the modern null coalescing operator (??):

$ php -r 'var_dump($_POST["hn"] ?? null);'
NULL

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMajid FouladpourView Question on Stackoverflow
Solution 1 - PhpSarfrazView Answer on Stackoverflow
Solution 2 - PhpTyson of the NorthwestView Answer on Stackoverflow
Solution 3 - PhpSenorPuercoView Answer on Stackoverflow
Solution 4 - PhpHydrinoView Answer on Stackoverflow
Solution 5 - PhpFrédéric MarchalView Answer on Stackoverflow