在PHP中使用@而不是isset

时间:2011-07-28 22:32:05

标签: php char conditional-statements solution isset

在某些情况下,我可以使用@字符而不是使用较长的isset()函数吗? 如果没有,为什么不呢?

我喜欢使用它,因为在很多情况下我可以保存几个引号,括号和点。

7 个答案:

答案 0 :(得分:6)

我假设您在说@字符时谈论的是error suppression operator,但这不是isset()的替代。

isset()用于确定程序中是否已存在给定变量,以确定使用该变量是否安全。

我怀疑你正在做的是尝试使用变量而不管它是否存在,但是会抑制可能由此产生的任何错误。在行的开头使用@运算符会告诉PHP忽略任何错误而不报告错误。

@运算符是“为此表达式临时设置error_reporting(0)”的简写。 isset()是一个完全不同的结构。

答案 1 :(得分:1)

你不应该只使用@@会抑制警告。这并不意味着代码是正确的,并且警告可能仍会添加到您的日志文件中,具体取决于您的设置。使用isset进行检查要好得多。

答案 2 :(得分:0)

据我所知,@并不代替isset()。它是一个错误抑制运算符,可防止在脚本中存在错误时显示错误。如果在PHP代码中使用它也是一个非常糟糕的习惯。

答案 3 :(得分:0)

技术上有效,但在创建输出时我更喜欢显式isset解决方案有几个原因,我假设你正在做的事情:

  1. 如果我是处理旧代码的新开发人员,我会认出isset成语。我知道你在做什么。使用@,找出你的意图并不容易。
  2. 假设您要检查是否设置了对象的属性,例如$user->name。如果您只是使用错误抑制来查看是否设置了name,那么如果$user未定义,您将永远不会收到通知。相反,最好运行isset($user->name)并明确,这样,如果未定义$user,您将收到错误通知。
  3. 错误抑制总体上是一个坏习惯。错误通知,您应该尽可能简单地通知错误。在不必要的时候压制它们会导致将来出现问题。

答案 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");
}


<小时/> 另外,看看PaulPRO的答案。如果他说的确实如此,那么您的日志文件也可能会记录您不知道的警告。这会导致日志文件在发布后的调试过程中不太有用。

答案 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