Подтвердить что ты не робот

Использование AND/OR в if else выражение PHP

Как вы используете 'AND/OR' в инструкции if else else? Это будет:

1) И

if ($status = 'clear' AND $pRent == 0) {
    mysql_query("UPDATE rent 
                    SET dNo = '$id', 
                        status = 'clear', 
                        colour = '#3C0' 
                  WHERE rent.id = $id");
} 

2) OR

if ($status = 'clear' OR $pRent == 0) {
    mysql_query("UPDATE rent 
                    SET dNo = '$id', 
                        status = 'clear', 
                        colour = '#3C0' 
                  WHERE rent.id = $id");
} 
4b9b3361

Ответ 1

Да. Ответ - да. http://www.php.net/manual/en/language.operators.logical.php


Две вещи:

  • Многие программисты предпочитают && и || вместо and и or, но они работают одинаково (безопасно для приоритета).
  • $status = 'clear' должен быть $status == 'clear'. = является присваиванием, == является сопоставлением.

Ответ 2

Немного поздно, но не важно...
вопрос: "Как вы используете...?" короткий ответ - вы делаете это правильно


Другой вопрос: "Когда вы его используете?"
Я использую && вместо AND и || вместо OR.
$a = 1
$b = 3

Теперь,

if ($a == 1 && $b == 1) { TRUE } else { FALSE }

в этом случае результат "FALSE", потому что B не равен 1, теперь что, если

if ($a == 1 || $b == 1) { TRUE } else { FALSE }

Это вернет "ИСТИНА", даже если B все еще не является значением, которое мы запрашиваем, есть еще один способ вернуть TRUE без использования OR/|| и это будет XOR

if ($a == 1 xor $b == 1) { TRUE } else { FALSE }

в этом случае нам нужна только одна из наших переменных, НО НЕ ОБА, если оба из них TRUE, результат будет FALSE.

Надеюсь, это поможет...

больше в:
http://www.php.net/manual/en/language.operators.logical.php

Ответ 3

У вас есть 2 вопроса.

  • используйте == для сравнения. Вы использовали =, который предназначен для назначения.

  • используйте && для "и" и || для "или". and и or будут работать, но они нетрадиционные.

Ответ 4

Там некоторые шутки и вводящие в заблуждение комментарии, даже частично некорректная информация в ответах здесь. Я хотел бы попытаться улучшить их:

Первый, как указывали некоторые, у вас есть ошибка в коде, относящаяся к вопросу:

if ($status = 'clear' AND $pRent == 0)

должен быть (обратите внимание на == вместо = в первой части):

if ($status == 'clear' AND $pRent == 0)

который в этом случае функционально эквивалентен

if ($status == 'clear' && $pRent == 0)

Второй, обратите внимание, что эти операторы (and or && ||) являются операторами короткого замыкания. Это означает, что если ответ можно определить с уверенностью из первого выражения, второй никогда не будет оценен. Опять же это не имеет значения для вашей отлаженной строки выше, но это чрезвычайно важно, когда вы объединяете эти операторы с назначением, потому что

Третий, реальная разница между and or и && || является их приоритетом оператора. В частности, важно, чтобы && || имели более высокий приоритет, чем операторы присваивания (= += -= *= **= /= .= %= &= |= ^= <<= >>=), а and or имели более низкую точность, чем операторы присваивания. Таким образом, в заявлении, которое сочетает использование присваивания и логической оценки, важно, какой из них выбрать.

Модифицированные примеры из Страница PHP для логических операторов:

$e = false || true;

будет оценивать до true и присваивать это значение $e, потому что || имеет более высокий приоритет оператора, чем =, и поэтому он по существу оценивает следующее:

$e = (false || true);

Однако

$e = false or true;

назначит false на $e (а затем выполнит операцию or и оценит true), поскольку = имеет более высокий приоритет оператора, чем or, по существу оценивая следующим образом:

($e = false) or true;

Тот факт, что эта двусмысленность даже существует, позволяет многим программистам всегда использовать && ||, а затем все работает четко, как можно было бы ожидать на языке, таком как C, т.е. сначала логические операции, затем назначение.

Некоторые языки, такие как Perl, используют эту конструкцию часто в формате, подобном этому:

$connection = database_connect($parameters) or die("Unable to connect to DB.");

Это теоретически присваивало бы соединение с базой данных $connection, или если это не сработало (и мы предполагаем, что здесь функция вернет значение, которое в этом случае будет иметь значение false), оно закончит script с помощью сообщение об ошибке. Из-за короткого замыкания, если соединение с базой данных завершается успешно, die() никогда не оценивается.

Некоторые языки, допускающие эту конструкцию, прямо запрещают присвоения в условных/логических операциях (например, Python), чтобы устранить смещение в обратном направлении.

PHP пошел, разрешив оба, поэтому вам просто нужно узнать о ваших двух вариантах один раз, а затем код, как вы хотите, но, надеюсь, вы будете так или иначе согласованы.

Всякий раз, когда вы сомневаетесь, просто добавьте лишний набор скобок, который удаляет всю двусмысленность. Они всегда будут одинаковыми:

$e = (false || true);
$e = (false or true);

Вооружившись всеми этими знаниями, я предпочитаю использовать and or, потому что я чувствую, что он делает код более читаемым. У меня просто есть правило не комбинировать назначения с логическими оценками. Но в этот момент это просто предпочтение, и последовательность здесь намного важнее, чем какая вы выбираете.

Ответ 5

И есть &&, а OR - ||, как в C.

Ответ 7

для AND вы используете

if ($status = 'clear' && $pRent == 0) {
    mysql_query("UPDATE rent SET dNo = '$id', status = 'clear', colour = '#3C0' WHERE rent.id = $id");
} 

для ИЛИ вы используете

if ($status = 'clear' || $pRent == 0) {
    mysql_query("UPDATE rent SET dNo = '$id', status = 'clear', colour = '#3C0' WHERE rent.id = $id");
} 

Ответ 8

Я думаю, у меня здесь немного путаницы.:) Но, похоже, никто другой не имеет.

Вы спрашиваете, какой из них следует использовать в этом сценарии? Если да, то И это правильный ответ.

Если вы спрашиваете, как работают операторы, то

В php работают как И, &, так и ИЛИ, ||. Если вы новичок в программировании, а php - один из ваших первых языков, я предлагаю использовать AND и OR, потому что он повышает читаемость и уменьшает путаницу при проверке. Но если вы уже знакомы с любыми другими языками, то вы, возможно, уже знакомы с && и || операторы.

Ответ 9

<?php
$val1 = rand(1,4); 
$val2=rand(1,4); 

if ($pars[$last0] == "reviews" && $pars[$last] > 0) { 
    echo widget("Bootstrap Theme - Member Profile - Read Review",'',$w[website_id],$w);
} else { ?>
    <div class="w100">
        <div style="background:transparent!important;" class="w100 well" id="postreview">
            <?php 
            $_GET[user_id] = $user[user_id];
            $_GET[member_id] = $_COOKIE[userid];
            $_GET[subaction] = "savereview"; 
            $_GET[ip] = $_SERVER[REMOTE_ADDR]; 
            $_GET[httpr] = $_ENV[requesturl]; 
            echo form("member_review","",$w[website_id],$w);?>
        </div></div>

ive заменил 'else' на '& &' поэтому оба расположены... argh

Ответ 10

"И" не работает в моем PHP-коде.

Возможно, версия сервера?

"& &" отлично работает.