Это сравнение данных должно происходить только тогда, когда 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; } }
Если я не укажу return true
в предложении else, compareDates () никогда не «выйдет», независимо от значения «1» или «bla bla».
Почему это?
«Argh!: S Я запутался: зачем возвращать true означает« выполнение функции выхода », а return false не означает? Я имею в виду, должен возвращаться независимо от значения, быть концом строки для выполнения этой функции? некоторые основные понятия.
… Но если я изменяю return true, чтобы возвращать false в этом else, методы продолжают называться "
return возвращает независимо от значения, поэтому вы правы в своем предположении.
кажется, что ваш вопрос, вероятно, лежит в функции, вызывающей compareDates (). Вы говорите, что метод «продолжает называться», возможно, вызывается compareDates () в цикле? вам нужно дважды проверить, чтобы убедиться, что вы правильно обрабатываете возвращаемое значение compareDates () в вызывающей функции.
ps (об исключении оператора 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 <- все о валидации данных cake Framework здесь
[Раздел: добавление собственных методов проверки]
«Метод должен возвращать true, если значение действительно. Если проверка не прошла, верните значение false. Другое допустимое возвращаемое значение – это строки, которые будут отображаться как сообщение об ошибке. Возврат строки означает, что проверка не выполнена».
Это означает, что поле firstPageEnterDate будет считаться действительным только в том случае, если вы вернете значение, которое считается истинным из вашей функции compareDates (). возврат false или NULL означает, что поле firstPageEnterDate недопустимо.
Вы даже не нуждаетесь в этом, так как вы ничего не делаете, если оператор if является ложным
Вы можете просто вернуть true как последнее выражение в функции.
Это позволяет проверить правдоподобие при возврате функции иначе, если оператор if не работает, ваша функция вернет неопределенные
Все зависит от вас, что вы возвращаете, если утверждение if ложно, в этом случае вы вернулись
Всегда есть оператор возврата в конце :), вы также можете переписать так:
public function compareDates() { if ($this->data[$this->alias]['enabled'] === "1") { return $this->data[$this->alias]['firstPageEnterDate'] < $this->data[$this->alias]['firstPageLeaveDate']; } return true; }
что-то вроде бы было яснее, на мой взгляд.
public function compareDates() { return ($this->data[$this->alias]['enabled'] != "1") || ($this->data[$this->alias]['firstPageEnterDate'] < $this->data[$this->alias]['firstPageLeaveDate'];) }