PHP中的’@’前缀有什么作用?[重复]

2021/01/14 02:21 · php ·  · 0评论

以下代码中的“ @”符号有什么作用?

@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键!

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

本文地址:http://php.askforanswer.com/phpzhongdeqianzhuiyoushenmezuoyongzhongfu.html
文章标签: ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!