PHP:@!vs!@--有什么不同

  • 本文关键字:vs PHP php
  • 更新时间 :
  • 英文 :


我正在处理file_get_contents函数(我知道网络问题的通知,并返回指示操作失败的FALSE(。现在我不在乎网络错误,我只想要网络分辨率,并不断尝试,直到我得到它。

因此,我将@放在func之前,以防止通知使我的cli窗口充满不需要的文本。
为了使事情循环工作,我添加了!

while (($data=!@file_get_contents('http://example.com/')) === false);

但是与此有什么不同

while (($data=@!file_get_contents('http://example.com/')) === false);

那么,我的问题是它们之间有什么区别??

快速回答:它们在功能上是相同的

@是PHP错误抑制运算符,它会对后续表达式隐藏所有错误。

当你说

!@function()

,您的意思是抑制function()(以及任何更深层次的函数调用等(可能产生的所有错误,然后否定结果。

@!function()

整个!function()被视为表达式,因此函数中的任何错误都被再次隐藏。

请参阅https://3v4l.org/dPINA例如,请注意在这两种情况下是如何抑制警告的。

@!file_get_contents=!将函数的结果计算为布尔值(truefalse(。@会抑制表达式结果中的所有警告。

!@file_get_contents=@抑制函数中的所有警告,然后!将抑制错误的函数的结果评估为布尔值(truefalse(。

编辑:我的答案被标记为已接受,因此我使用iainn答案中的正确行为进行了编辑。

最新更新