'At' symbol before variable name in PHP: @$_POST
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?
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:
- Error Control Operators
- Bad uses of the @ operator
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);
It won't throw a warning if $_POST['hn'] is not set.
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.
It suppresses warnings if $_POST['something'] is not defined.
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
精彩评论