Наверное, каждому из нас приходилось когда-либо приходилось использовать следующую конструкцию:
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
or die("Could not connect: " . mysql_error());
Но многие даже не задумывается о том, как этот код работает. Чтобы все разъяснить и расставить по полочкам, в этой статье я расскажу об особеннностях приоритетов and, &&, or, ||.
Сначала разберем как работает оператор ||. И так, если один или оба его операнда имеют истинное значение, он возвращает true. Если оба операнда возвращают ложные значения, он вернет false. Это всем известная истина.
Оператор OR работает также как и оператор || за одним исключением, если оператор OR используется с присваиванием, то сначала он вычислит и вернет значение левого операнда (т.е. присвоит переменной значение левого операнда). В остальном он работает точно также как и оператор ||, т.е. если один или оба его операнда имеют истинное значение, он возвращает true. Если оба операнда возвращают ложные значения, он вернет false.
А теперь, чтоб стало еще понятнее, рассмотрим пример кода:
// Оператор "||" имеет больший приоритет, чем "or"
// Результат выражения (false || true) будет присвоен переменной $var1
// Действие приоритета: $var1 = (false || true)
$var1 = false || true;
echo $var1; // => 1
// Сначала переменной присваивается значение false, а затем вычисляется второй операнд
// Действие приоритета: ($var2 = false) or true
$var2 = false or true;
echo $var2; // false не выводится
// ($var3 = 0) or 3
$var3 = 0 or 3;
echo "$var3"; // => 0
Тоже самое можно сказать и про операторы and и &&:
// в переменную $var попадет true, несмотряна то, что true and false дает false
$var = true and false;
// => 1