在某些情况下,我可以使用@
字符而不使用更长的isset()
函数吗?如果不是,为什么不呢?
我喜欢使用它,因为在很多情况下我可以保存几个引号、括号和点。
在某些情况下,我可以使用@
字符而不使用更长的isset()
函数吗?如果不是,为什么不呢?
我喜欢使用它,因为在很多情况下我可以保存几个引号、括号和点。
我假设您在说字符时正在谈论错误抑制运算@
符,但这不能替代isset()
.
isset()
用于确定程序中是否已经存在给定变量,以确定使用该变量是否安全。
我怀疑您正在做的是尝试使用该变量,而不管它是否存在,但要抑制可能由此产生的任何错误。@
在行首使用操作符告诉 PHP 忽略任何错误而不报告它。
运算符是“为此表达式@
临时设置”的简写。是一个完全不同的构造。error_reporting(0)
isset()
你不应该只使用@
. @
抑制警告。这并不意味着代码是正确的,并且根据您的设置,警告可能仍会添加到您的日志文件中。isset
用它来做检查要好得多。
据我所知@
,是不可替代的isset()
。它是一个错误抑制运算符,可防止在脚本中确实存在错误时显示错误。如果在 PHP 代码中使用,这也是一个非常糟糕的习惯。
它在技术上是有效的,但是有几个原因我isset
在创建输出时更喜欢显式解决方案,我认为这就是你正在做的事情:
isset
成语。我知道你想做什么。有了@
,要弄清楚你的意图并不容易。$user->name
. 如果您只是使用错误抑制来查看是否name
已设置,则您将永远不会收到$user
未定义的通知。相反,最好运行isset($user->name)
并明确,这样,如果$user
未定义,您将收到错误通知。这取决于你想要做什么。例如,如果您正在执行 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");
}
如果没有其他原因,请不要使用 @ 作为 isset 的替代品,因为:
看看这段代码:
echo (@$test) ?: 'default';
如果 $test 是'something'
那么你会得到'something'
.
如果 $test 是空的,null
或者不存在,那么你会得到'default'
;
现在问题来了:
假设'0'
或者FALSE
是有效的答案?
如果 $test is '0'
or FALSE
then you'll get 'default'
NOT '0'
as you would want。
您应该使用长格式三进制:
echo (isset($test)) ? $test : 'default';
在处理可以评估为布尔值错误的参数时,没有更多的编码,并且更可靠。
运算符@
还会使您的代码运行速度变慢,如此处所指出的:http:
//php.net/manual/en/language.operators.errorcontrol.php
但正如已经指出的那样,如果发生错误,代码只会运行得相当慢。在这种情况下,使用 isset 而不是@
运算符的代码要快得多,如下所述:http:
//seanmonstar.com/post/909029460/php-error-suppression-performance