سطح B: کارآگاه منطقی
در سطح قبل، PHP را به یک ماشین حساب تبدیل کردیم. حالا وقت آن است که به آن قدرت تفکر و تصمیمگیری بدهیم. در این سطح، با عملگرهایی آشنا میشویم که به PHP اجازه میدهند مقادیر را مقایسه کند، شرایط را بسنجد و مانند یک کارآگاه، به نتیجهگیریهای منطقی (درست یا غلط) برسد.
محتوای آموزشی
۱. عملگرهای مقایسهای (Comparison Operators)
این عملگرها دو مقدار را با هم مقایسه کرده و همیشه یک نتیجه بولین (true یا false) برمیگردانند.
==(مساوی): بررسی میکند که آیا دو مقدار از نظر ارزشی برابرند یا خیر (نوع داده را نادیده میگیرد).===(همانی یا یکسان): بررسی میکند که آیا دو مقدار هم از نظر ارزش و هم از نظر نوع داده برابرند یا خیر.!=یا<>(نامساوی): بررسی میکند که آیا دو مقدار از نظر ارزشی برابر نیستند.!==(غیر یکسان): بررسی میکند که آیا دو مقدار از نظر ارزش یا نوع داده برابر نیستند.>(بزرگتر از)<(کوچکتر از)>=(بزرگتر یا مساوی)<=(کوچکتر یا مساوی)
تفاوت حیاتی بین == و ===
این یکی از مهمترین مفاهیم در PHP است. فرض کنید $a = 5 (عدد) و $b = "5" (رشته) را داریم.
- نتیجهی
$a == $bبرابرtrueاست، چون PHP به طور خودکار رشته را به عدد تبدیل کرده و میبیند که هر دو ارزش ۵ دارند. - نتیجهی
$a === $bبرابرfalseاست، چون با وجود ارزش یکسان، نوع دادهی آنها متفاوت است (یکیintegerو دیگریstring).
قانون طلایی: برای جلوگیری از خطاهای ناخواسته، همیشه و تا جای ممکن از مقایسه سخت (=== و !==) استفاده کنید. این کار کد شما را قابل پیشبینیتر و امنتر میکند.
۲. عملگرهای منطقی (Logical Operators)
این عملگرها به شما اجازه میدهند چند شرط مقایسهای را با هم ترکیب کنید.
&&یاand(و منطقی): نتیجهtrueاست اگر و تنها اگر هر دو طرفtrueباشند.||یاor(یا منطقی): نتیجهtrueاست اگر حداقل یکی از دو طرفtrueباشد.!(نه منطقی): نتیجه را برعکس میکند.!trueمیشودfalseو!falseمیشودtrue.
۳. عملگرهای افزایش/کاهش (Increment/Decrement Operators)
این عملگرها راههای میانبری برای اضافه یا کم کردن یک واحد از یک متغیر عددی هستند.
++$a(پیشافزایش): ابتدا یک واحد به$aاضافه میکند و سپس مقدار جدید را برمیگرداند.$a++(پسافزایش): ابتدا مقدار فعلی$aرا برمیگرداند و سپس یک واحد به آن اضافه میکند.--$a(پیشکاهش): ابتدا یک واحد از$aکم میکند و سپس مقدار جدید را برمیگرداند.$a--(پسکاهش): ابتدا مقدار فعلی$aرا برمیگرداند و سپس یک واحد از آن کم میکند.
تفاوت بین پیش و پس افزایش/کاهش بسیار ظریف اما مهم است و در حلقهها و محاسبات پیچیده کاربرد دارد.
کارگاه عملی: سیستم بررسی قبولی دانشآموز
در این مثال، با استفاده از عملگرهای مقایسهای و منطقی، وضعیت قبولی یک دانشآموز را بر اساس نمره و حضورش بررسی میکنیم.
<?php
$student_score = 14.5;
$attendance_percentage = 85;
$has_disciplinary_warning = false;
// شروط قبولی: نمره بالای ۱۰ و حضور بالای ۷۰ درصد
$passes_academically = ($student_score > 10) && ($attendance_percentage > 70);
// شرط نهایی قبولی: باید شرایط آکادمیک را داشته باشد و اخطار انضباطی هم نداشته باشد
$is_eligible_for_promotion = $passes_academically && !$has_disciplinary_warning;
echo "نمره دانشآموز: $student_score";
echo "<br>";
echo "درصد حضور: $attendance_percentage %";
echo "<br>";
echo "آیا اخطار انضباطی دارد؟ ";
var_dump($has_disciplinary_warning);
echo "<hr>";
echo "آیا شرایط آکادمیک قبولی را دارد؟ ";
var_dump($passes_academically);
echo "<br>";
echo "<strong>آیا در نهایت قبول است؟ </strong>";
var_dump($is_eligible_for_promotion);
// مثال برای عملگر افزایش
$attempts = 1;
echo "<hr>";
echo "تلاش اولیه برای ثبت نمره: " . $attempts++; // اول ۱ چاپ میشود، سپس attempts برابر ۲ میشود
echo "<br>";
echo "مقدار نهایی متغیر تلاش: " . $attempts; // اینجا ۲ چاپ میشود
?>
تمرین شما
صورت تمرین:
- کارآگاه نوع داده: دو متغیر
$a = 5(عدد) و$b = "5"(رشته) تعریف کنید. در خطوط جداگانه، نتیجه مقایسه آنها با==و===را با استفاده ازvar_dump()چاپ کنید. زیر هرvar_dump، در یک کامنت (مانند// Explain why...) توضیح دهید که چرا آن خروجی (trueیاfalse) را دریافت کردهاید. - سیستم مجوز ورود: یک سناریو برای ورود به یک بخش ویژه یک سایت طراحی کنید. کاربر برای ورود باید شرایط زیر را همزمان داشته باشد:
- سن او ۱۸ سال یا بیشتر باشد.
- عضویت ویژه (
is_premium_member) داشته باشد (یعنی مقدارشtrueباشد). - حساب او مسدود (
is_banned) نشده باشد (یعنی مقدارشfalseباشد).
$age,$is_premium_member,$is_banned) و مقادیر مختلفی را در آنها امتحان کنید. سپس یک عبارت منطقی بنویسید که در نهایتtrueیاfalseرا بر اساس این سه شرط برگرداند و باvar_dumpچاپ شود.
باشگاه ذهن: یک چالش برای هوش مصنوعی
چالش شما: عملگرهای منطقی && و || در PHP (و بسیاری از زبانهای دیگر) یک رفتار هوشمندانه به نام "ارزیابی اتصال کوتاه" (Short-circuit Evaluation) دارند. این یک مفهوم بهینهسازی است که درک آن شما را به یک برنامهنویس حرفهایتر تبدیل میکند.
وظیفه: یک پرامپت برای هوش مصنوعی طراحی کنید تا مفهوم "ارزیابی اتصال کوتاه" را برای شما به طور کامل توضیح دهد. پرامپت شما باید از AI بخواهد:
- تعریف کند که "ارزیابی اتصال کوتاه" برای عملگر
&&چیست. (راهنمایی: اگر بخش اولfalseباشد چه اتفاقی برای بخش دوم میافتد؟) - تعریف کند که این رفتار برای عملگر
||چگونه است. (راهنمایی: اگر بخش اولtrueباشد...) - یک مثال کد عملی در PHP ارائه دهد که در آن یک تابع در سمت راست عملگر
&&قرار دارد و نشان دهد که آن تابع تحت چه شرایطی هرگز اجرا نمیشود. - توضیح دهد که این رفتار چگونه میتواند به نوشتن کدهای بهینهتر و جلوگیری از خطاهای احتمالی (مانند تقسیم بر صفر) کمک کند.