Elementor Header #8

49. Логические операторы 2

1. Введение

В предыдущем уроке мы рассмотрели основные логические операторы, такие как &&, ||, xor, и !. В этом уроке мы углубимся в использование логических операторов, рассмотрим их особенности и более сложные случаи применения. Мы также обсудим типичные ошибки и способы их предотвращения.

2. Логический оператор AND и OR

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

2.1 Оператор AND

Оператор AND имеет более низкий приоритет по сравнению с &&. Это означает, что в выражении с несколькими операторами, AND будет выполнен позже.

Пример:

				
					<?php
$a = true;
$b = false;

if ($a and $b) {
    echo "Both are true.";
} else {
    echo "At least one is false."; // Вывод: At least one is false.
}
?>

				
			

2.2 Оператор OR

Оператор OR также имеет более низкий приоритет по сравнению с ||.

Пример:

				
					<?php
$a = true;
$b = false;

if ($a or $b) {
    echo "At least one is true."; // Вывод: At least one is true.
} else {
    echo "Both are false.";
}
?>

				
			

3. Логический оператор XOR (исключающее ИЛИ)

Оператор XOR возвращает true, если ровно одно из условий истинно, но не оба.

Пример:

				
					<?php
$a = true;
$b = false;

if ($a xor $b) {
    echo "Only one is true."; // Вывод: Only one is true.
} else {
    echo "Either both are true or both are false.";
}
?>

				
			

4. Применение логических операторов в условных выражениях

Логические операторы часто используются для создания сложных условий в конструкциях if, while, и for.

Пример:

				
					<?php
$age = 25;
$hasPermission = true;

if ($age > 18 && $hasPermission) {
    echo "Access granted.";
} else {
    echo "Access denied.";
}
?>

				
			

5. Логические операторы и приоритет

Понимание приоритета логических операторов помогает избежать логических ошибок. Вот порядок приоритета:

  1. ! (NOT)
  2. && (AND)
  3. || (OR)
  4. xor
  5. and (AND)
  6. or (OR)

Пример приоритета:

				
					<?php
$a = true;
$b = false;
$c = true;

if ($a || $b && $c) {
    echo "Condition is true."; // Вывод: Condition is true.
} else {
    echo "Condition is false.";
}
?>

				
			

В этом примере оператор && выполняется перед ||, что влияет на результат выражения.

6. Комбинирование логических операторов

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

Пример:

				
					<?php
$x = 10;
$y = 20;
$z = 30;

if (($x < $y && $y < $z) || $z == 30) {
    echo "Condition is true."; // Вывод: Condition is true.
} else {
    echo "Condition is false.";
}
?>

				
			

7. Распространённые ошибки

7.1 Ошибка: Неправильное использование and и or

Операторы and и or имеют низкий приоритет, что может привести к неожиданным результатам при комбинировании с другими операторами.

Пример ошибки:

				
					<?php
$a = true;
$b = false;

if ($a or $b && false) {
    echo "Condition is true."; // Вывод: Condition is true.
} else {
    echo "Condition is false.";
}
?>

				
			

Решение: Используйте скобки для явного указания порядка выполнения.

Корректный пример:

				
					<?php
if ($a or ($b && false)) {
    echo "Condition is true.";
}
?>

				
			

7.2 Ошибка: Неправильное использование xor

Оператор xor может быть неожиданно интерпретирован, если не учитывать его специфику.

Пример ошибки:

				
					<?php
$a = true;
$b = true;

if ($a xor $b) {
    echo "Only one is true.";
} else {
    echo "Either both are true or both are false."; // Вывод: Either both are true or both are false.
}
?>

				
			

Решение: Убедитесь, что понимаете, как работает xor и его отличие от обычного or.

Заключение

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

8. Тестовое задание

Для закрепления материала выполните следующее задание:

  1. Напишите код, который проверяет, является ли число положительным и чётным. Используйте комбинацию операторов && и ||.

  2. Создайте функцию isEligible, которая принимает два булевых значения. Возвращайте true, если одно из значений истинно, но не оба одновременно.

  3. Реализуйте функцию checkAccess, которая принимает два условия: возраст и статус подписки. Возвращайте true, если возраст меньше 18 лет или статус подписки равен true. Используйте оператор or для определения доступа.

Пример выполнения задания:

				
					<?php
// 1. Проверка на положительное и чётное число
$number = 10;
if ($number > 0 && $number % 2 == 0) {
    echo "The number is positive and even.";
} else {
    echo "The number is either negative or odd.";
}

// 2. Функция isEligible
function isEligible($a, $b) {
    return ($a xor $b);
}

echo isEligible(true, false) ? 'Eligible' : 'Not Eligible'; // Вывод: Eligible
echo isEligible(true, true) ? 'Eligible' : 'Not Eligible'; // Вывод: Not Eligible

// 3. Функция checkAccess
function checkAccess($age, $hasSubscription) {
    return $age < 18 or $hasSubscription;
}

echo checkAccess(16, false) ? 'Access granted' : 'Access denied'; // Вывод: Access granted
echo checkAccess(20, true) ? 'Access granted' : 'Access denied'; // Вывод: Access granted
?>

				
			

Удачи в выполнении задания и дальнейшем изучении PHP!

logo