什么是'@';PHP中的前缀do?

什么是'@';PHP中的前缀do?,php,prefix,Php,Prefix,“@”符号在以下代码中起什么作用 @mkdir(ROOT. "cache/"); : PHP支持一个错误控制操作符:at符号(@)。在PHP中,在表达式前面加上前缀时,将忽略该表达式可能生成的任何错误消息 如果启用了track_errors功能,则表达式生成的任何错误消息都将保存在变量$php_errormsg中。此变量将在每次错误时被覆盖,因此如果要使用它,请尽早检查 正如在评论中所指出的,我也无法想象实际使用此功能的理由——编写适当处理错误状态/条件的代码。正如所指出的,这是错误抑制操作符

“@”符号在以下代码中起什么作用

@mkdir(ROOT. "cache/");
:

PHP支持一个错误控制操作符:at符号(@)。在PHP中,在表达式前面加上前缀时,将忽略该表达式可能生成的任何错误消息

如果启用了track_errors功能,则表达式生成的任何错误消息都将保存在变量$php_errormsg中。此变量将在每次错误时被覆盖,因此如果要使用它,请尽早检查


正如在评论中所指出的,我也无法想象实际使用此功能的理由——编写适当处理错误状态/条件的代码。

正如所指出的,这是错误抑制操作符

但是没有被指出的是,使用错误是非常糟糕的做法——错误不应该默默地失败

检查错误返回,并在使用异常的地方使用try/catch块

在具体的例子中

@mkdir(ROOT. "cache/");
…它忽略
mkdir()
中的任何错误。如果失败,它将返回
FALSE
,因此您应该执行以下操作

if ( ! mkdir(ROOT. "cache/")) {
   // Handle error.
}

人们似乎忘记了PHP是一种快速完成任务的肮脏语言,直到最近它才试图变得成熟和复杂

错误抑制是一种使函数按照您需要的方式运行的快速而肮脏的方法,因为在web开发中,您无法预测将向您抛出什么,而且有时不值得关注

一个典型的例子是有用的函数getimagesize,它允许您获取有关某人上传的图像的一些信息。
如果图像文件不是标准图像文件,则此函数会夹紧抖动。检查文件、确定是否可以将其加载到getimagesize中并不是开发人员的职责。也许有一些优雅的方法可以做到这一点,但说真的,我不在乎

只要这样做:

if( !($a = @getimagesize(  $_FILE['file']['tmp_name'] )))
{
   unlink( $_FILE['file']['tmp_name'] );

   //politely tell user that you rejected their image!
}
是的,您可以使用更优雅的try-and-catch语句,但最终,您已经捕获了错误并抑制了错误消息,这是您想要的,而不会损坏tab键


与上述答案相反,谨慎使用的@前缀不会导致失控的火车失事。它只允许开发人员以他们喜欢的方式处理错误。

谢谢您的回答。这只会让我继承的恶心代码比我想象的还要糟糕!因为调试最困难,所以请尽量避免使用此功能,尤其是在关键代码上。如果您计划抑制错误,最好使用
错误报告(0)有两个原因:A.更快,B.以后更容易更改。+1就像其他语言一样(根据示例,C),向您发出警告或通知是有原因的。在循环中使用@时要小心:每次运行都会触发
error\u reporting()
两次。通常最好在循环之前禁用错误,然后在循环完成后重置错误级别。确定。尝试在PHP站点中搜索“@”或“@前缀”-这会让您大开眼界。不是。”“;-)打开PHP通知后,我认为@suppressor变得非常有用,即:if(@$_POST['submit']='send'){}“可能有一些优雅的方法可以做到这一点,但说真的,我不在乎!”我希望永远不要碰你的代码。我真的很喜欢这个答案。我对PHP非常陌生,它很容易意外地生成您不希望用户看到的错误。此运算符似乎很容易修复。“很容易意外生成您不希望用户看到的错误”抱歉,尝试说“很容易意外生成您不希望用户看到的错误”并不是使用@的原因。你仍然需要对这种情况负责。