在某些情况下,我可以使用@
字符而不是使用较长的isset()
函数吗?
如果没有,为什么不呢?
我喜欢使用它,因为在很多情况下我可以保存几个引号,括号和点。
答案 0 :(得分:6)
我假设您在说@
字符时谈论的是error suppression operator,但这不是isset()
的替代。
isset()
用于确定程序中是否已存在给定变量,以确定使用该变量是否安全。
我怀疑你正在做的是尝试使用变量而不管它是否存在,但是会抑制可能由此产生的任何错误。在行的开头使用@
运算符会告诉PHP忽略任何错误而不报告错误。
@
运算符是“为此表达式临时设置error_reporting(0)
”的简写。 isset()
是一个完全不同的结构。
答案 1 :(得分:1)
你不应该只使用@
。 @
会抑制警告。这并不意味着代码是正确的,并且警告可能仍会添加到您的日志文件中,具体取决于您的设置。使用isset
进行检查要好得多。
答案 2 :(得分:0)
据我所知,@
并不代替isset()
。它是一个错误抑制运算符,可防止在脚本中存在错误时显示错误。如果在PHP代码中使用它也是一个非常糟糕的习惯。
答案 3 :(得分:0)
技术上有效,但在创建输出时我更喜欢显式isset
解决方案有几个原因,我假设你正在做的事情:
isset
成语。我知道你在做什么。使用@
,找出你的意图并不容易。$user->name
。如果您只是使用错误抑制来查看是否设置了name
,那么如果$user
未定义,您将永远不会收到通知。相反,最好运行isset($user->name)
并明确,这样,如果未定义$user
,您将收到错误通知。答案 4 :(得分:0)
这取决于你想要做什么。例如,如果您正在执行var_dump()或其他调试,并且知道有时您的值将不会被设置,我会说在这种情况下它是可以的。
var_dump(@$_REQUEST['sometimesIamSet']);
如果你在这种情况下使用它:
if(@$_REQUEST['something']){
// do something
}
else{
// do something else
}
我强烈建议不要这样做。您应该编写代码以明确地执行您想要执行的操作。
if(isset($_REQUEST['something'])){
// Hurray I know exactly what is going on!
}
else{
// Not set!
}
生产中唯一可以考虑使用@的实例就是当你想抛出自己的错误时。例如
$database_connection = @db_connect_function();
if($database_connection === false){
throw new Exception("DB connection could not be made");
}
答案 5 :(得分:0)
如果没有其他原因,不要使用@代替isset ,因为:
看看这段代码:
echo (@$test) ?: 'default';
如果$ test为'something'
,那么您将获得'something'
。
如果$ test为空,null
或不存在,那么您将获得'default'
;
现在问题就在这里:
假设'0'
或FALSE
是有效答案?
如果$ test为'0'
或FALSE
,那么您可以根据需要获得'default'
NOT '0'
。
长格式三元是您应该使用的:
echo (isset($test)) ? $test : 'default';
在处理可以计算为布尔值false的参数时,编码并不多,而且更可靠。
答案 6 :(得分:-1)
@
运算符也会使代码运行得更慢,如下所示:
http://php.net/manual/en/language.operators.errorcontrol.php
但是正如已经指出的那样,如果发生错误,代码的运行速度会明显变慢。在这种情况下,使用isset而不是@
运算符的代码要快得多,如下所述:
http://seanmonstar.com/post/909029460/php-error-suppression-performance