Использование AND / OR в PHP-операторе if else - PullRequest
65 голосов
/ 10 декабря 2010

Как вы используете 'И / ИЛИ' в PHP-операторе if else?Будет ли это:

1) И

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

2) ИЛИ

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

Ответы [ 10 ]

108 голосов
/ 10 декабря 2010

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


Две вещи, хотя:

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

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


Другой вопрос будет: «Когда вы его используете?»Я использую && вместо 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 }

Это вернет «ИСТИНА», даже если В все еще не запрашиваемое нами значение, есть другой способ вернуть ИСТИНА без использования ИЛИ / ||и это будет XOR

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

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

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

подробнее в:
http://www.php.net/manual/en/language.operators.logical.php

11 голосов
/ 08 апреля 2016

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

Сначала , как некоторые отмечали, в вашем коде есть ошибка, связанная с вопросом:

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 в этом случае), скрипт завершит работу с ошибкой сообщение. Из-за короткого замыкания, если соединение с базой данных успешно, die() никогда не оценивается.

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

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

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

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

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

9 голосов
/ 10 декабря 2010

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

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

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

6 голосов
/ 10 декабря 2010

AND равно &&, а OR равно ||, как в C.

4 голосов
/ 10 декабря 2010

AND и OR являются просто синтаксическим сахаром для && и ||, как в JavaScript или других синтаксических языках в стиле C.

Похоже, что AND и OR имеют более низкий приоритет , чем их эквиваленты в стиле C.

2 голосов
/ 10 декабря 2010

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

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");
} 
0 голосов
/ 19 октября 2016
<?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>

я заменил 'else' на '&&', так что оба помещаются ... argh

0 голосов
/ 20 февраля 2014

«И» не работает в моем коде PHP.

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

"&&" работает нормально.

0 голосов
/ 10 декабря 2010

Я думаю, что у меня здесь немного смущения. :) Но, кажется, больше никто не имеет ..

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

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

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

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