【发布时间】:2011-03-18 17:32:41
【问题描述】:
昨天,我在一个问题上发布了answer,其中包括几个(当时我不知道)非常糟糕的代码示例。从那时起,我一直在研究我对 PHP 的基本知识,这些知识让我认为这样的代码是可能的。这让我想到了一个我似乎无法找到答案的问题:
如果我想检查变量是否设置了任何内容,不使用isset() 或其他辅助函数是否有效?这是一个“例如”:
if($not_set){
//do something
} else {
//do something else
}
而不是……
if(isset($not_set)){
//do something
} else {
//do something else
}
从变量名可以看出这个变量没有设置。因此条件为假,else 部分将运行。直到现在我一直在使用这种做法,但是在昨天的帖子之后,我现在有一个想法,这是错误的。
这就是为什么我认为省略上面的isset() 函数是一个不错的做法。来自 PHP 手册:
if 构造是最常见的构造之一 许多语言的重要特征, 包括 PHP。它允许 代码的条件执行 碎片。 PHP 具有 if 结构类似于 C:
if (expr) 语句
如关于 表达式,表达式被评估 为其布尔值。如果表达式 计算结果为 TRUE,PHP 将执行 声明,如果它评估为 FALSE - 它会忽略它。更多的 有关评估什么值的信息 到 FALSE 可以在 “转换为布尔值”部分。
从“转换为布尔部分”:
转换为布尔值时 ,考虑以下值 错误:
... * 特殊类型NULL(包括未设置的变量)
如果这是一种不好的做法,为什么手册会特意声明包含未设置的变量?如果未设置,则将其转换为 NULL,因此由条件正确评估。使用isset() 会得到相同的结果,但需要额外的周期。
有人可以告诉我我是否一直都错了,为什么? (也许它有多糟糕?)
谢谢,所以,你永远不会失望。
编辑:谢谢大家(这很快)。老实说,我认为到目前为止所有的答案都很棒,不知道该选择哪个答案......如果你的答案没有被选中,我仍然会投票:o)
【问题讨论】:
-
好吧,您的方法将捕获未设置的变量,但它也会捕获已设置的其他变量。所以这并不是对正在设置的变量的真正测试
-
嘿deceze!感谢昨天所做的一切——我对 PHP 的理解有了巨大的飞跃(如您所见)。我在搜索时没有看到那个,但我的想法基本上是一样的。
-
我只想在上面链接的线程中重申我的一个 cmets:
isset有助于澄清您的代码并帮助调试:if (isset($var))表示“此变量是可选的,可能不存在” ,并且您的其余代码需要这样对待它。if ($var)仅表示“如果为真”。如果 PHP 对后者发出警告,您就知道您的代码在某处被搞砸了。出于这个原因,您总是需要在完全爆炸时使用错误报告进行编程。
标签: php if-statement