php unit 这是一个确定的测试,看看是否设置了一个变量




phpunit单元测试 (4)

如果设置了变量,则会遇到问题,但计算结果为FALSE,如下所示:

  • 布尔值FALSE本身
  • 整数0(零)
  • 浮点数0.0(零)
  • 空字符串和字符串“0”
  • 具有零元素的数组
  • 具有零成员变量的对象(仅限PHP 4)
  • 特殊类型的NULL(包括未设置的变量)
  • 由空标签创建的SimpleXML对象

采取从PHP手册。

基本上,使用isset()显示你明确地检查变量是否存在,而不是NULL,而if语句的结构只检查变量是否为真。 这更清楚,更不容易出错。

昨天,我发布了一个问题的答案 ,其中包括几个(我当时不知道)代码非常糟糕的例子。 从那以后,我一直在看我的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提供了一个类似于C:

如果(expr)语句

如关于表达式的部分所述,expression被评估为其布尔值。 如果表达式计算结果为TRUE,PHP将执行语句,如果计算结果为FALSE,它将忽略它。 有关什么值评估为FALSE的更多信息可以在“转换为布尔值”一节中找到。

并从“转换为布尔部分”:

转换为布尔值时,以下值被认为是FALSE:

... *特殊类型的NULL(包括未设置的变量)

为什么这个手册会不自觉地说,如果这是一个不好的做法,那么包含未设置的变量? 如果未设置,它将被转换为NULL,因此由条件正确评估。 使用isset()会找到相同的结果,但会花费额外的周期来完成。

有人能告诉我,我是否一直在错误,为什么? (也许它有多糟糕?)

谢谢,所以你永远不会失望。

编辑:谢谢大家(这很快)。 我真的认为,迄今为止所有的答案都是很好的,不知道该选哪个答案。如果你没有选择,我仍然会upvote:o)


这是一个普遍的做法,但不好 - 你应该总是使用isset

如果你的$not_set被设置,并且是一个值为false的布尔值,那么你的“测试”将会失败!


如果变量没有设置,你会得到一个Notice 。 如果你使用isset()你不会得到通知。 所以从错误报告的角度来看,使用isset()更好:)

例:

error_reporting(E_ALL);   
if($a) {
   echo 'foo';
}

Notice: Undefined variable: a in /Users/kling/test on line 5

error_reporting(E_ALL);
if(isset($a)) {
   echo 'foo';
}

不输出任何东西。

底线:如果代码质量对您很重要,请使用isset()


这是没关系,但不是好的做法, if检查设置变量。 我的头顶有两个原因:

  1. 使用isset使意图清晰 - 你正在检查是否设置了变量,而不是检查条件是否为真。
  2. if ($not_set)$not_set被实际设置但是等于boolean false时计算为false




if-statement