PHP Условная логика, конкретный порядок? - PullRequest
4 голосов
/ 26 января 2010

У меня есть условное утверждение, которое выглядит так:

if ($_POST['password'] == $_POST['repeat'] && $_SESSION['type'] == "admin")

Но, допустим, я также хочу, чтобы условное выражение оценивалось как true для пользователей с типом "superuser" (вместо "admin").

Так что я мог бы, например, написать:

if ($_POST['password'] == $_POST['repeat'] && $_SESSION['type'] == "admin" || $_SESSION['type'] == "superuser")

Но если предположить, что PHP читает условные выражения и уравнения слева направо, тогда «суперпользователь» может дать условную оценку true, даже если «password» и «repeat» не равны, поскольку мы помещаем мнимое скобки вокруг двух операндов рядом с "&&", верно?

Я мог бы добавить скобки для инкапсуляции двух операндов для «||», но я слабо помню, что, возможно, я что-то пробовал в прошлом, и у него это не получилось.

Есть ли лучший способ сделать это? Скобки действительно работают (таким образом, делая вывод, что моя память неисправна? [Утечка памяти? Хех.])

Спасибо!

Ответы [ 4 ]

3 голосов
/ 26 января 2010

Да, скобки переопределяют тот факт, что && имеет более высокий приоритет, чем ||.

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

Чтобы получить то, что вы хотите, вы можете:

if (($_POST['password'] == $_POST['repeat']) && ($_SESSION['type'] == "admin" || $_SESSION['type'] == "superuser"))

Что будет иметь значение true, если пароли совпадают, а тип пользователя - admin или super user.

Или, более подробно:

$valid_password= $_POST['password'] == $_POST['repeat'];
$valid_user= $_SESSION['type'] == "admin" || $_SESSION['type'] == "superuser";
if ($valid_password && $valid_user)
 // Do something
0 голосов
/ 26 января 2010

Приложите регистрацию администратора () и ИЛИ проверку типа. Суперпользователь должен сначала быть проверен на оптимальный код.

($_SESSION['type'] == "superuser" || ($_POST['password'] == $_POST['repeat'] && $_SESSION['type'] == "admin") )
0 голосов
/ 26 января 2010

Не проверял, но попробуйте это:

if ($_POST['password'] == $_POST['repeat'] && 
($_SESSION['type'] == "admin" || $_SESSION['type'] == "superuser"))
...