“在” PHP 中变量名前的符号:@$_POST

发布于 2024-09-15 15:49:20 字数 115 浏览 4 评论 0原文

我见过函数调用前面有一个 at 符号来关闭警告。今天我浏览了一些代码,发现了这一点:

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

它在这里有什么好处?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

墟烟 2024-09-22 15:49:20

@ 是 PHP 中的错误抑制运算符。

PHP 支持一种错误控制
运算符:at 符号 (@)。什么时候
前置到 PHP 表达式中,任何
可能生成的错误消息
该表达式将被忽略。

参见:

更新:

在您的示例中,它在变量名称之前使用,以避免出现 E_NOTICE 错误。如果在$_POST数组中,hn键没有设置;它会抛出 E_NOTICE 消息,但使用 @ 来避免 E_NOTICE

请注意,您还可以将此行放在脚本顶部以避免 E_NOTICE 错误:

error_reporting(E_ALL ^ E_NOTICE);

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);
酒绊 2024-09-22 15:49:20

如果未设置 $_POST['hn'] ,它不会发出警告。

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

|煩躁 2024-09-22 15:49:20

这意味着,如果未定义 $_POST['hn'],则 PHP 不会抛出错误或警告,而是将 NULL 分配给 $hn。

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.

把梦留给海 2024-09-22 15:49:20

如果未定义 $_POST['something'] ,它会抑制警告。

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

城歌 2024-09-22 15:49:20

我在 11 年后回答了有关现代 php 的完整性问题。

从 php 7.0 开始, 空合并运算符是消除警告的更直接的替代方案。 ?? 运算符就是为此目的而设计的(除其他外)。

如果没有 @,则会显示警告:

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

带有静音警告的输出 (@):

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

使用现代空合并运算符获得相同的结果 (??):

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

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文