仅当enable
具有字符串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;
}
}
如果我没有在else子句中声明return true
,则compareDates()将永远不会“退出”,无论值是“1”还是“bla bla”。
为什么?
答案 0 :(得分:2)
无论价值如何,“唉!:我感到困惑:为什么返回true意味着”退出功能 执行“,并返回false不?我的意思是,应该返回 值,是该函数执行的行的结尾?一世 显然缺少一些核心概念。请指教。
...但是,如果我更改返回true以在该else子句上返回false, 这些方法被称为“
返回都会返回,因此您的假设是正确的。
似乎您的问题可能在于调用compareDates()的函数。你说方法“继续被调用”,是在循环中调用compareDates()吗? 您需要仔细检查以确保正确处理调用函数中compareDates()的返回值。
P.S。 (关于省略函数的return语句的问题)
来自http://www.php.net/manual/en/functions.returning-values.php
“如果省略返回值,则返回NULL值。”
**更新**
现在我们知道你正在使用Cake Framework。
来自http://book.cakephp.org/2.0/en/models/data-validation.html&lt; - 所有关于蛋糕框架数据验证的地方
[部分:添加您自己的验证方法]
“如果值有效,则该方法应返回true。如果该值有效 验证失败,返回false。其他有效的返回值是 将显示为错误消息的字符串。返回一个字符串 表示验证失败。 “
这意味着只有从compareDates()函数返回一个被认为为true的值时,firstPageEnterDate字段才会被视为有效。返回false或NULL将意味着firstPageEnterDate字段无效。
答案 1 :(得分:1)
如果if语句为false,你甚至不需要else,因为你不做任何其他事情
您可以返回true作为函数中的最后一个语句。
这允许你检查函数返回的真实性,否则如果if语句失败,你的函数将返回undefined
如果if语句为false,则归结于你所返回的内容,在这种情况下,你返回true
答案 2 :(得分:0)
最后总是有一个return语句:),你也可以这样重写:
public function compareDates()
{
if ($this->data[$this->alias]['enabled'] === "1") {
return $this->data[$this->alias]['firstPageEnterDate'] < $this->data[$this->alias]['firstPageLeaveDate'];
}
return true;
}
答案 3 :(得分:0)
在我看来会更清楚。
public function compareDates()
{
return ($this->data[$this->alias]['enabled'] != "1") ||
($this->data[$this->alias]['firstPageEnterDate'] <
$this->data[$this->alias]['firstPageLeaveDate'];)
}