重点是仅在
时验证$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
?
答案 0 :(得分:1)
您正在进行简单的比较(==
),因此PHP正在寻找“真理”语句。因此,任何非“假”的值都会评估您的陈述(即0
,false
,空字符串,NULL
)。您可以找到完整列表here。
解决此问题的最佳方法是使用等效性来确保它是您想要的确切值
if ($this->data[$this->alias]['enabled'] === 1)
这将迫使PHP查找1
的整数。但请注意,您的价值必须相同。换句话说
if('1' === 1)
始终为false,因为字符串1
与整数1