@符号在PHP中的用途是什么?

@符号在PHP中的用途是什么?

我见过@在某些功能面前,如下所示:

$fileHandle = @fopen($fileName, $writeAttributes);

这个符号有什么用?


慕斯709654
浏览 784回答 3
3回答

喵喔喔

它会抑制错误消息-请参阅差错控制算子在PHP手册中。

富国沪深

它能抑制错误。看见差错控制算子在手册中:PHP支持一个错误控制操作符:at符号(@)。当添加到PHP中的表达式时,该表达式可能生成的任何错误消息都将被忽略。如果您已将自定义错误处理程序函数设置为SET错误处理程序()然后它仍然会被调用,但是这个自定义错误处理程序可以(而且应该)调用错误报告()当触发错误的调用前面有@.时,它将返回0。

www说

这个@符号是差错控制操作者(又称“沉默”或“关闭”操作员)。它使PHP禁止由关联表达式生成的任何错误消息(注意、警告、致命等)。它的工作原理就像一个一元运算符,例如,它具有优先性和结合性。以下是一些例子:@echo 1 / 0;// generates "Parse error: syntax error, unexpected T_ECHO" since // echo is not an expressionecho @(1 / 0); // suppressed "Warning: Division by zero"@$i / 0;// suppressed "Notice: Undefined variable: i"// displayed "Warning: Division by zero"@($i / 0); // suppressed "Notice: Undefined variable: i"// suppressed "Warning: Division by zero"$c = @$_POST["a"] + @$_POST["b"]; // suppressed "Notice: Undefined index: a"// suppressed "Notice: Undefined index: b"$c = @foobar();echo "Script was not terminated"; // suppressed "Fatal error: Call to undefined function foobar()"// however, PHP did not "ignore" the error and terminated the // script because the error was "fatal"如果使用自定义错误处理程序而不是标准的PHP错误处理程序,会发生什么情况:如果您用SET_ERROR_HANDER()设置了一个自定义错误处理程序函数,那么它仍然会被调用,但是这个自定义错误处理程序可以(而且应该)调用Error_Reporting(),当触发错误的调用前面有一个@时,这个函数将返回0。下面的代码示例说明了这一点:function bad_error_handler($errno, $errstr, $errfile, $errline, $errcontext) {     echo "[bad_error_handler]: $errstr";     return true;}set_error_handler("bad_error_handler");echo @(1 / 0);// prints "[bad_error_handler]: Division by zero"错误处理程序没有检查@符号是有效的。手册建议如下:function better_error_handler($errno, $errstr, $errfile, $errline, $errcontext) {     if(error_reporting() !== 0) {         echo "[better_error_handler]: $errstr";     }     // take appropriate action     return true;}
打开App,查看更多内容
随时随地看视频慕课网APP