Применение нелогических значений в условных операторах if языка РНР |
Начинающим программировать на РНР применение нелогических значений переменных, отличающихся от true или false, в условных операторах if может показаться не совсем понятным. Например, переменная $result в операторе if ($result) совсем не обязательно должна содержать логическое значение. И если это значение не является логическим, то оно сначала преобразуется в логическое значение, а затем вычисляется. Когда переменная $result содержит любые данные, кроме нулевого или пустого значения, ее содержимое определяется как логическое значение true, и поэтому далее выполняется кодовый блок, следующий после условного оператора if. Так, если переменная $result содержит объект или массив, ее содержимое определяется как логическое значение true независимо от хранящихся в ней данных. Например, присваивание Обрабатывая нулевые или пустые значения, следует, однако, не терять бдительность, чтобы не попасть в следующую западню. Если, например, метод может возвратить нулевое значение как достоверное, но возвращает логическое значение false, указывающее на возникновение ошибки, то код Аналогичным образом неправильно сработает условный оператор В качестве выхода из этого положения рекомендуется пользоваться оператором = (с тремя знаками равенства) языка РНР для проверки на точность совпадения. Это означает, что оба сравниваемых элемента должны быть одного и того же типа (логического, целочисленного, строкового и т.д.), а также должны иметь одинаковое значение. Следовательно, результат выражения $result === false вычисляется как логическое значение true только в том случае, если переменная $ result содержит логическое значение false. Применительно к рассматриваемому здесь примеру программная ошибка устраняется, даже если переменная $result содержит нулевое значение. В этом случае результат выражения $result === false вычисляется как логическое значение false. Операторы === и !== осуществляют проверку на точность совпадения сравниваемых элементов по типу и значению, и поэтому ими удобно пользоваться при возврате из методов нулевых целочисленных значений, а также пустых (" ") и нулевых ("О") строковых значений в качестве достоверных результатов. $parts = explode(':', $result->password); Пароль хранится в двух полях базы данных Joomla, разделяемых двоеточием. В первой строке приведенного выше фрагмента кода используется функция explode () языка РНР для размещения двух частей столбца таблицы с паролем в массиве $parts. Затем первая часть пароля сохраняется в переменной $crypt, а вторая его часть — в переменной $salt. По умолчанию для шифрования паролей в Joomla применяется алгоритм одностороннего хеширования под названием md5. Под термином "одностороннее" подразумевается только шифрование пароля, но не его дешифрирование. Поэтому для проверки правильности введенного пароля значение, введенное пользователем, шифруется и сохраняется в переменной $testcrypt. Далее следует очередной кодовый блок условных операторов if/then/else, в котором проверяется, совпадает ли зашифрованное значение введенного пароля с зашифрованным значением, хранящимся в базе данных. Этот кодовый блок приведен ниже. if ($crypt == $testcrypt) { В первой части приведенного выше фрагмента кода проверяется правильность введенного пароля. Для этого получается объект пользователя, и в полях email и fullname объекта $response устанавливаются значения из соответствующих полей объекта пользователя. Затем получается объект подходящего языка в зависимости от конкретной части веб-сайта (пользовательской или административной). И наконец, в поле status объекта $response устанавливается состояние успешной регистрации. Если же сравниваемые пароли не совпадают, то в поле status устанавливается состояние неудачной регистрации, а в поле error_message — соответствующее сообщение об ошибке. Обратите внимание на то, что команда возврата не выдается при успешной регистрации. Вместо этого в рассматриваемом здесь методе применяется специальный прием для восстановления связи с вызывающим методом. Этот прием состоит в том, что переменная $ response изменяется в данном методе, чтобы раскрыть значения полей из объекта достоверного пользователя. Напомним, что в рассматриваемом здесь примере метод authenticate () подключаемого модуля был вызван из метода authenticate () класса JAuthentication. Рассматривая исходный код класса JAuthentication после вызова метода authenticate () из подключаемого модуля, можно обнаружить следующий фрагмент кода: // выйти из цикла, если аутентификация прошла успешно if ($response->status === JAUTHENTICATE_STATUS_SUCCESS) Этот видоизмененный вариант объекта $ response доступен в рассматриваемом здесь методе и фактически возвращается им. И хотя метод authenticate () подключаемого модуля не возвращает сам объект $response, он передает обратно вызывающему методу результаты своего выполнения через обновленный объект $response.
Понравился материал? Пригодилась информация? Плюсани в социалки!
Теги:
|
Похожие новости | |
|