为什么在调用@
时,您无法使用unset
运算符隐藏错误?以下结果导致解析错误:
@unset($myvar);
答案 0 :(得分:10)
@
运算符仅适用于表达式,unset
是语言结构,而不是函数。有关详细信息,请参阅manual page:
注意:@ -operator仅适用于 表达式。一个简单的经验法则 是:如果你可以采取的价值 什么,你可以在@之前 操作员。例如,你可以 将它添加到变量,函数和 include()调用,常量等 向前。你不能把它添加到 函数或类定义,或 条件结构,如if和 foreach,等等。
答案 1 :(得分:5)
您可以通过在函数/语句前加上@来隐藏错误。但是,unset是一种语言结构,因此它不支持@ -rule。
好处是unset()永远不会失败,即使变量本身不存在,所以这不是必需的。
正如夜间人提到的,使用@是非常糟糕的做法。
答案 2 :(得分:4)
错误抑制运算符仅适用于表达式:
unset
是一种语言结构,而不是函数,因此无法使用@
。
答案 3 :(得分:0)
为什么在调用unset时不能用@运算符隐藏错误?
我不知道。但是你不应该使用错误抑制操作符(@)。有两种不同的情况:
您希望在发生错误时立即看到所有错误,最好使用PHP提供的原始错误消息。
您希望没有PHP错误消息给用户起泡。相反,您希望记录PHP错误消息并显示您自己的信息,外行人可以理解。
使用@时无法实现这一区别。您应该通过配置display_errors,error_reporting并使用set_error_handler设置错误处理程序来区分这些方案。