Почему эта строка кода выполняется, если условие IF ложно? Не имеет никакого смысла - PullRequest
0 голосов
/ 26 февраля 2010

Вот код:

<?php



class Order extends Zend_Db_Table_Abstract
 {
 protected $_name = 'orders';

 protected $_limit = 200;

 protected $_authorised = false;

 public function setLimit($limit)
 {
 $this->_limit = $limit;
 }

 public function setAuthorised($auth)
 {
 $this->_authorised = (bool) $auth;
 }

 public function insert(array $data)
 {
     if ($data['amount'] > $this->_limit && $this->_authorised === false) {
         throw new Exception('Unauthorised transaction of greater than ' . this->_limit . ' units');
     }
     return parent::insert($data);
 }
 }

Почему этот метод запускается ТОЛЬКО , если условие не выполняется. Я программист C #, моя логика подсказывает, что он будет работать независимо от IF, правильно? Спасибо миллион.

Ответы [ 3 ]

2 голосов
/ 26 февраля 2010

Когда вы генерируете исключение, это обычно приводит к завершению оставшегося кода, если у вас нет оператора try...catch. Таким образом, если сумма больше 200, а пользователь не авторизован, он выполнит блок внутри оператора if.

Ссылка, которую вы указали, упоминает, что она «всплывет» на контроллер, где она будет перехвачена. Поскольку это не отражено в приведенном выше коде (модели), выполнение внутри модели останавливается и передается в стек контроллеру. Он не возвращается к вашей модели, поэтому строка, следующая за if, не будет вызвана.

Обратитесь к руководству PHP по исключениям для получения дополнительной информации.

0 голосов
/ 26 февраля 2010

Даже в C #, если выброшено исключение, код за его пределами не выполняется.

0 голосов
/ 26 февраля 2010

Исключение прервет выполнение кода.

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