PHP, если операторы автоматически работают - PullRequest
0 голосов
/ 14 сентября 2011

Возможно, вопрос n00b, но взгляните на следующий код:

function admin_delete ( $id )
{

    if ($this->User->delete($id))
    {
        $this->Session->setFlash('The user with id: ' . $id . ' has been deleted!');
        $this->redirect(array('controller' => 'users', 'action' => 'admin_index'));
    }
}

Теперь, насколько я понимаю, это загрузит представление admin_delete, а затем, когда пользователь удаляет пользователя, он делаетвещи внутри оператора if.Но это делает удаление сразу ???Зачем?Так как он просто проверяет, произошло ли удаление, и в методе нет ничего, что могло бы сказать, что оно действительно удалено.Так почему же код внутри оператора if просто автоматически запускается так, если никакие условия не возвращают true или функция вызывается вне оператора if: /

Cheers

Ответы [ 2 ]

3 голосов
/ 14 сентября 2011

Хорошо, давайте посмотрим, как строится ваш оператор if.

if ($this->User->delete($id))

Вы в основном говорите: «Если вызов функции delete возвращает true, тогда запустите этот другой код». Чтобы увидеть, возвращает ли оно значение true, нужно вызвать функцию. По сути, поскольку это не составное логическое выражение, ваш вызов функции всегда будет оцениваться.

0 голосов
/ 14 сентября 2011

http://www.php.net/manual/en/language.expressions.php

Прочтите второй последний абзац о выражениях, преобразованных в их логические значения при необходимости. Таким образом, даже если функция удаления не возвращает явно ИСТИНА или ЛОЖЬ, она может возвращать значение, которое преобразуется в значение ИСТИНА. Плюс, как предложено, функция удаления всегда вызывается и оценивается, как уже было предложено.

http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...