نوع bool (کوتاهشدهی «منطقی»، یا همان «بولی») فقط دو مقدار دارد: true و false. مقدارهای تحتاللفظی true و false در کد به بزرگی و کوچکی حروف حساس نیستند.
<?php
$value_is_true = true;
$value_is_false = false;
از مقدارهای منطقی اغلب در عبارتهای منطقی، بهعنوان نتیجهی یک عملگر، استفاده میشود و بعد در ساختارهای کنترلی به کار میروند.
چندین عملگر منطقی وجود دارد:
!$a: اگر $a برابر true نباشد، true را برمیگرداند$a && $b: اگر $a و $b هر دو true باشند، true را برمیگرداند$a || $b: اگر $a یا $b برابر true باشد، true را برمیگرداندعملگرهای and و or هم وجود دارند و به ترتیب مکمل && و || هستند. رفتارشان با && و || یکسان نیست و ممکن است نتیجههای غیرمنتظرهای تولید کنند و به همین دلیل استفاده از آنها توصیه نمیشود.
در این تمرین، منطق ماجراجویی یک بازی نقشآفرینی جدید را پیادهسازی میکنید که دوستتان در حال ساخت آن است. شخصیت اصلی بازی آنالین است؛ دختری شجاع با یک سگ خانگی خشمگین و وفادار. متأسفانه فاجعهای رخ میدهد؛ بهترین دوستش در حالی که در جنگل به دنبال توت میگشت، ربوده شد. آنالین تلاش میکند بهترین دوستش را پیدا و آزاد کند و در این ماجراجویی، در صورت تمایل، سگش را هم با خود میبرد.
پس از مدتی که رد بهترین دوستش را دنبال میکند، اردوگاهی را پیدا میکند که بهترین دوستش در آن زندانی است. معلوم میشود دو آدمربا وجود دارد: یک شوالیهی نیرومند و یک کماندار حیلهگر.
آنالین پس از یافتن آدمرباها بررسی میکند که کدامیک از کارهای زیر را میتواند انجام دهد:
شما چهار وظیفه دارید: پیادهسازی منطق تشخیص اینکه کارهای بالا بر اساس وضعیت سه شخصیتِ حاضر در جنگل و همچنین حضور یا عدم حضور سگ آنالین در دسترس هستند یا نه.
تابعی به اسم canFastAttack پیادهسازی کنید که یک مقدار منطقی میگیرد و نشان میدهد شوالیه بیدار است یا نه.
این تابع اگر کار «حملهی سریع» بر اساس وضعیت شخصیت در دسترس باشد، 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