我正在处理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
=!
将函数的结果计算为布尔值(true
或false
(。@
会抑制表达式结果中的所有警告。
!@file_get_contents
=@
抑制函数中的所有警告,然后!
将抑制错误的函数的结果评估为布尔值(true
或false
(。
编辑:我的答案被标记为已接受,因此我使用iainn
答案中的正确行为进行了编辑。