理解条件语句上的php逻辑 - 返回真正的理解

时间:2013-12-28 20:41:44

标签: php

重点是仅在

时验证
$this->data[$this->alias]['enabled']

等于一。因此,如果$this->data[$this->alias]['enabled'] == 1,请验证。

我期待这种代码的和平,就能完成这项任务:

public function compareDates() {
   if ($this->data[$this->alias]['enabled'] == 1) {
      return $this->data[$this->alias]['firstPageEnterDate'] < $this->data[$this->alias]['firstPageLeaveDate'];
   }
}

然而,似乎这并不像我预期的那样有效。相反,它始终经过验证,无论$this->data[$this->alias]['enabled']

的值如何

然而,这段代码似乎做得很好:

public function compareDates() {
    if ($this->data[$this->alias]['enabled'] != 1) return true; // we don't want to check
    return $this->data[$this->alias]['firstPageEnterDate'] < $this->data[$this->alias]['firstPageLeaveDate'];
}

在您的理解中,“我们不想检查”的含义是什么? 为什么:if ($this->data[$this->alias]['enabled'] == 1)还不够?

有人可以解释吗?

更新

如果我这样做:

public function compareDates() 
{
  if ($this->data[$this->alias]['enabled'] === "1") {
    return $this->data[$this->alias]['firstPageEnterDate'] < $this->data[$this->alias]['firstPageLeaveDate'];
  } else {
    return true;
  }
}

它也有效。我的问题是:

为什么我需要明确声明return true

1 个答案:

答案 0 :(得分:1)

您正在进行简单的比较(==),因此PHP正在寻找“真理”语句。因此,任何非“假”的值都会评估您的陈述(即0false,空字符串,NULL)。您可以找到完整列表here

解决此问题的最佳方法是使用等效性来确保它是您想要的确切值

if ($this->data[$this->alias]['enabled'] === 1)

这将迫使PHP查找1的整数。但请注意,您的价值必须相同。换句话说

if('1' === 1)

始终为false,因为字符串1与整数1

不同