What does the '@' prefix do in PHP?
"@"符号在以下代码中的作用是什么?
1 |
它禁止错误显示:
PHP supports one error control operator: the at sign (@). When prepended to an expression in PHP, any error messages that might be generated by that expression will be ignored.
If the track_errors feature is enabled, any error message generated by the expression will be saved in the variable $php_errormsg. This variable will be overwritten on each error, so check early if you want to use it.
正如注释中所指出的,我也无法想象实际使用此功能的原因——编写适当处理错误状态/条件的代码。
如前所述,它是错误抑制运算符。
但还没有指出的是,使用错误的做法是非常糟糕的——错误不应该一声不响地失败。
检查错误返回,并在使用异常的地方使用try/catch块。
在具体的例子中…
1 |
…它忽略了
1 2 3 |
人们似乎忘记了PHP是一种快速完成任务的肮脏语言,直到最近它才试图变得成熟和成熟。
错误抑制是一种快速而肮脏的方法,可以使函数按照您需要的方式运行,因为在Web开发中,您无法预测将向您抛出什么,有时它不值得关心!
一个典型的例子是有用的函数getImageSize,它允许您获取有关某人上载的图像的一些信息。如果图像文件不是标准图像文件,则此函数将不稳定地夹住。它不是真正的开发者角色来检查一个文件,确定它是否可以加载到getImageSize中。也许有优雅的方式,但说真的,我不在乎!
只要这样做:
1 2 3 4 5 6 | if( !($a = @getimagesize( $_FILE['file']['tmp_name'] ))) { unlink( $_FILE['file']['tmp_name'] ); //politely tell user that you rejected their image! } |
是的,您可以使用更加优雅的try-and-catch语句,但最后,您捕获了错误并抑制了错误消息,这是您想要的,而不需要使用tab键!
与上述答案相反,仔细使用的@前缀不会导致火车失控。它只允许开发人员以他们喜欢的方式来适应错误。