Тип bool (скорочено від булевих значень, англ. Boolean) має лише два значення: true та false.
Літеральні значення true та false у коді не залежать від регістру.
<?php
$value_is_true = true;
$value_is_false = false;
Булеві значення часто використовують у логічних виразах як результат роботи оператора, а потім у керуючих конструкціях.
Існує кілька логічних операторів:
!$a: повертає true, якщо $a не дорівнює true
$a && $b (логічне і): повертає true, якщо і $a, і $b дорівнюють true
$a || $b (логічне або): повертає true, якщо $a або $b дорівнює true
Існують також оператори and та or, які відповідають && і || відповідно.
Вони поводяться не так, як && і ||, і можуть давати несподівані результати, тому їх не радимо використовувати.
У цій вправі ми реалізуємо логіку квесту для нової рольової гри, яку розробляє друг. Головна героїня гри - Анналін, хоробра дівчина з відважним і відданим собакою. На жаль, трапляється біда: її найкращого друга викрали, коли він шукав у лісі ягоди. Анналін спробує знайти й визволити найкращого друга, можливо, взявши із собою в цей квест свого собаку.
Витративши деякий час на те, щоб іти слідом за найкращим другом, вона знаходить табір, у якому його увʼязнено. Виявляється, викрадачів двоє: могутній лицар і хитрий лучник.
Знайшовши викрадачів, Анналін обмірковує, які з наведених далі дій вона може здійснити:
У нас чотири завдання: реалізувати логіку, яка визначає, чи доступні наведені вище дії, виходячи зі стану трьох персонажів, знайдених у лісі, і з того, чи є з Анналін її собака.
Реалізуйте функцію з назвою canFastAttack, яка приймає булеве значення (англ. Boolean), що вказує, чи не спить лицар.
Ця функція повертає true, якщо дія «Швидка атака» доступна, виходячи зі стану персонажа.
Інакше повертає false:
<?php
$is_knight_awake = true;
$infiltration = new AnnalynsInfiltration();
$infiltration->canFastAttack($is_knight_awake);
// => false
Реалізуйте функцію з назвою canSpy, яка приймає три булеві значення, що вказують відповідно, чи не сплять лицар, лучник і вʼязень.
Функція повертає true, якщо дія «Шпигування» доступна, виходячи зі стану персонажів.
Інакше повертає false:
<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;
$infiltration = new AnnalynsInfiltration();
$infiltration->canSpy($is_knight_awake, $is_archer_awake, $is_prisoner_awake);
// => true
Реалізуйте функцію з назвою canSignal, яка приймає два булеві значення, що вказують відповідно, чи не сплять лучник і вʼязень.
Функція повертає true, якщо дія «Подати сигнал вʼязню» доступна, виходячи зі стану персонажів.
Інакше повертає false:
<?php
$is_archer_awake = false;
$is_prisoner_awake = true;
$infiltration = new AnnalynsInfiltration();
$infiltration->canSignal($is_archer_awake, $is_prisoner_awake);
// => true
Реалізуйте функцію з назвою canLiberate, яка приймає чотири булеві значення.
Перші три параметри вказують відповідно, чи не сплять лицар, лучник і вʼязень.
Останній параметр вказує, чи присутній собака Анналін.
Функція повертає true, якщо дія «Визволити вʼязня» доступна, виходячи зі стану персонажів і присутності собаки Анналін.
Інакше вона повертає false:
<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;
$is_dog_present = false;
$infiltration = new AnnalynsInfiltration();
$infiltration->canLiberate(
$is_knight_awake,
$is_archer_awake,
$is_prisoner_awake,
$is_dog_present
);
// => false
Зареєструйтеся на Exercism, щоб вивчати й опановувати PHP, а також 11 концепцій122 вправи та справжнє наставництво від людей, і все це безкоштовно.