Будут ли побочные эффекты выполняться в этом случае, если - PullRequest
0 голосов
/ 24 августа 2009

Запускает ли функция add_new_user запрос SQL INSERT, если он находится внутри предложения if?

У меня есть функции

function add_new_user ( $username, $email, $passhash_md5 )
{
    -- cut: database INSERT queries
    return 1;                                                                                                
}

Я использую код выше как

if ( validate( $username, $password, $email ) == 1 ) {
    if ( add_new_user ( $username, $email, $passhash_md5 )  == 1 ) {   
                // problem here
              -- cut
    }                                                                                                        
}

Я задал этот вопрос, потому что я не уверен, почему этот обработчик всегда выдает уведомление о неудачной регистрации. Два кода принадлежат обработчику. Ошибка, кажется, в синтаксисе моего кода и, возможно, в использовании if / else.

Ответы [ 4 ]

4 голосов
/ 24 августа 2009

Запускает ли функция add_new_user SQL INSERT-запрос, если он находится внутри если -clause?

Да

function foo() {
  echo 'A';
  return true;
}

function bar() {
  echo 'B';
  return false;
}

if ( foo() ) {
  if ( bar() ) {
    echo 'C';
  }
}
// Output: AB
3 голосов
/ 24 августа 2009

Да

Функция сначала получает оценку для ее возвращаемого значения.

После того, как возвращаемое значение известно, возвращаемое значение сравнивается с целочисленным значением 1.

1 голос
/ 24 августа 2009

PHP должен оценить логическое выражение, чтобы узнать, выполнит ли он блок или нет. Таким образом, для оценки оператора «==» необходимо оценить обе стороны, включая функцию «add_new_user».

Итак, ответ: да , он оценит функцию add_new_user И выполнит операцию вставки (если у вас нет некоторого кода внутри add_new_user, который заблокирует это).

Однако вы делаете что-то, чего следует избегать, когда это возможно: вы используете условие с побочными эффектами! Это даст вам головную боль (например, прямо сейчас!).

1 голос
/ 24 августа 2009

Да. Все, что находится между if ( и ) {, проверяется, правда ли это. Здесь можно сделать все, что угодно.

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