昨天,我发布了一个问题的答案,其中包括几个(当时我不知道)非常糟糕的代码示例.从那以后,我一直在研究我对PHP的基本知识,这让我认为这样的代码是可行的.这让我想到一个我似乎无法找到答案的问题:
如果我想检查一个变量是否有任何设置,那么不使用isset()
或其他辅助函数是否有效?这是一个"例如":
if($not_set){
//do something
} else {
//do something else
}
Run Code Online (Sandbox Code Playgroud)
而不是...
if(isset($not_set)){
//do something
} else {
//do something else
}
Run Code Online (Sandbox Code Playgroud)
从变量的名称,您可以看到未设置此变量.因此条件将为false并且该else
部分将运行.到目前为止,我一直在使用这种做法,但在昨天的帖子之后,我现在得知这是错的.
这就是为什么我认为省略上述isset()
功能是一种不错的做法.从PHP手册:
if构造是许多语言最重要的特性之一,包括PHP.它允许条件执行代码片段.PHP的if结构类似于C的结构:
if(expr)语句
如关于表达式的部分所述,表达式被计算为其布尔值.如果expression的计算结果为TRUE,那么PHP将执行语句,如果计算结果为FALSE,它将忽略它.有关哪些值评估为FALSE的更多信息,请参阅"转换为布尔值"部分.
从'转换为布尔部分':
转换为布尔值时,以下值被视为FALSE:
...*特殊类型NULL(包括未设置的变量)
如果这是一个不好的做法,为什么手册会不断说明未包含的变量?如果未设置,它将转换为NULL,因此由条件正确评估.使用isset()
会找到相同的结果,但需要额外的周期才能完成.
有人可以告诉我,这一直是我一直都错了,为什么?(可能有多糟糕?)
谢谢,所以,你永远不会失望.
编辑:谢谢大家(这很快).老实说,我认为到目前为止所有的答案都很棒,并且不知道选择哪个答案......如果你的答案没有被选中,我仍然会投票:o)
Fel*_*ing 12
如果没有设置变量,你得到一个Notice
.如果您使用isset()
,则不会收到通知.所以从错误报告的角度来看,使用isset()
更好:)
例:
error_reporting(E_ALL);
if($a) {
echo 'foo';
}
Run Code Online (Sandbox Code Playgroud)
给
Notice: Undefined variable: a in /Users/kling/test on line 5
Run Code Online (Sandbox Code Playgroud)
而
error_reporting(E_ALL);
if(isset($a)) {
echo 'foo';
}
Run Code Online (Sandbox Code Playgroud)
不输出任何东西.
底线:如果代码质量对您很重要,请使用isset()
.
使用检查设置变量是可以的但不是好的做法if
.我头脑中有两个原因:
isset
使意图清晰 - 您正在检查变量是否已设置,而不是检查条件是否为真.if ($not_set)
$not_set
实际设置时将评估为false 但等于布尔值false
.如果设置了变量,您将遇到问题,但计算结果为FALSE,如下所示:
摘自PHP手册.
基本上,使用isset()表明您显式检查变量是否存在且不是NULL,而if语句的结构仅检查变量是否为true.它更清晰,更不容易出错.
归档时间: |
|
查看次数: |
403 次 |
最近记录: |