Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретична частина.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
463.36 Кб
Скачать
  1. Навіщо потрібні логічні операції? Перерахуйте операції порівняння. У чому полягає особливість операції еквівалентності?

Навіщо потрібні логічні операції?

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

Ці операції повертають одне з двох значень: true (істина) або false (неправда).

PHP підтримує логічні операції AND (І), OR (АБО), XOR (виключаюче АБО) і NOT (НЕ).

Логічні операції РНР

Приклад

Назва

Результат

$a and $b

Логічне 'і'

TRUE якщо і $a, і $b TRUE.

$a or $b

Логічне 'або'

TRUE якщо або $a, або $b TRUE.

$a xor $b

Виключаюче 'або'

TRUE якщо $a, або $b TRUE, но не оба.

! $a

Заперечення

TRUE якщо $a не TRUE.

$a && $b

Логічне 'и'

TRUE якщо і $a, і $b TRUE.

$a || $b

Логічне 'або'

TRUE якщо або $a, або $b TRUE.

Операції and і or мають менший пріоритет, ніж операції && і ||.

Смисл двох різних варіантів для операторів "and" і "or" в тому, що вони працюють з різними пріоритетами.

Обчислення логічних виразів, що містять такі оператори йде завжди зліва направо, при цьому, якщо результат уже очевидний (наприклад, false && щось завжди дає false), то обчислення обриваються, навіть якщо у виразі присутні виклики функцій. Наприклад, в операторі $ logic = 0 && (time ()> 100); стандартна функція time () ніколи не буде викликана.

Не слід забувати, що | і | | - два зовсім різних оператора, один з яких може потенційно повертати будь-яке число, а другий - тільки false і true.

Перерахуйте операції порівняння.

Операції порівняння виконують порівняння двох значень і незалежно від типів своїх аргументів вони завжди повертають одне з двох значень: false або true.

Якщо в результаті порівняння умова виконана, повертають true, а якщо ні - false.

a == b - істина, якщо a одно b.

a! = b - істина, якщо a не дорівнює b.

a <b - істина, якщо a менше b.

a> b - істина, якщо a більше b.

a <= b - істина, якщо a менше або дорівнює b.

a> = b - істина, якщо a більше або дорівнює b.

Зазначимо, що в PHP 4 можна порівнювати лише рядки або числа. Для масивів та об'єктів ці операції незастосовні.

У чому полягає особливість операції еквівалентності?

У PHP, починаючи з PHP4 є оператор тотожного порівняння - потрійний знак рівності ===, або оператор перевірки на еквівалентність. PHP досить терпимо ставиться до того, що рядки неявно перетворюються в числа, і навпаки. Наприклад, наступний код виведе, що значення змінних рівні: $ a = 10; $ b = "10"; if ($ a == $ b) echo "a і b рівні"; / / Виводить "a і b рівні"

І це зважаючи на те, що $a - число, а $b є рядком (текст).

Розглянемо ще інший фрагмент програми.

$ a = 0; / / нуль

$ b = ""; / / порожній рядок

if ($a == $ b) echo "a і b рівні"; // Виводить "a и b рівні"

Бачимо, що хоча $ a і $ b явно не рівні, але операція порівняння == дає такий результат, що вони рівні. При цьому порожній рядок перетворюється в нуль, який потім порівнюється з нулем. Тому оператор echo спрацьовує.

Дану проблему може вирішити оператор еквівалентності ===. Він не тільки порівнює два вирази, але порівнює їх типи. Покажемо той же фрагмент програми, але вже з використанням цього оператора ===.

$ a = 0; / / нуль

$ b = ""; / / порожній рядок

if ($ a === $ b) echo "a і b рівні";

Тепер нічого не буде надруковано, тобто оператор echo не спрацює. Можливості цього оператора далеко виходять за рамки простого порівняння. З його допомогою можна порівнювати масиви, об'єкти та інші величини. Розглянемо наступний приклад:

$ a = array ('a' => 'aaa');

$ b = array ('b' => 'bbb');

if ($ a == $ b) echo "З використанням операції == a = b <BR>";

if ($ a === $ b) echo "З використанням операції === a = b" <BR> ";

Якщо запустити представлений код, то буде виведено перше повідомлення, але не друге. Відбудеться це з тієї причини, що, як ми вже говорили, операнди-масиви перетворюються у рядки array, які потім і будуть порівнюватися. Оператор === позбавлений цього недоліку, тому працює вірно. Для оператора === існує і його антипод - оператор! ===