در برنامهنویسی همیشه قرار نیست تمام دستورات بدون توجه به شرایط اجرا شوند. در بسیاری از مواقع لازم است برنامه بر اساس یک وضعیت یا مقدار مشخص تصمیم بگیرد.
برای مثال:
- اگر کاربر وارد حساب خود شده بود، پنل کاربری را نمایش بده.
- اگر موجودی محصول بیشتر از صفر بود، امکان خرید را فعال کن.
- اگر سن کاربر بیشتر از ۱۸ سال بود، یک پیام مشخص نمایش بده.
- اگر مبلغ سفارش بیشتر از مقدار مشخصی بود، تخفیف بده.
- اگر رمز عبور صحیح بود، اجازه ورود به کاربر بده.
برای انجام چنین تصمیمگیریهایی در PHP از شرطها یا Conditional Statements استفاده میکنیم.
در این آموزش با مهمترین روشهای استفاده از شرط در PHP آشنا میشویم و ساختارهای if، else، elseif، switch و match را همراه با مثال بررسی میکنیم.
# شرط در PHP چیست؟
شرط به برنامه اجازه میدهد بر اساس درست یا غلط بودن یک Expression، تصمیم بگیرد که چه دستوری اجرا شود.
سادهترین ساختار شرط در PHP با if نوشته میشود:
$age = 20;
if ($age >= 18) {
echo "شما بالای 18 سال هستید.";
}
در این مثال PHP مقدار $age را بررسی میکند.
اگر شرط:
$age >= 18
برقرار باشد، کد داخل {} اجرا میشود.
در غیر این صورت، دستور داخل شرط اجرا نخواهد شد.
# ساختار if در PHP
ساختار کلی if به شکل زیر است:
if (condition) {
// code
}
برای مثال:
$score = 18;
if ($score >= 10) {
echo "قبول شدید.";
}
اگر مقدار $score برابر یا بیشتر از ۱۰ باشد، پیام نمایش داده میشود.
# شرط با متغیر Boolean
از آنجا که Boolean فقط دو مقدار true و false دارد، میتوان از آن مستقیماً در شرط استفاده کرد:
$isActive = true;
if ($isActive) {
echo "حساب کاربر فعال است.";
}
این روش در پروژههای واقعی بسیار رایج است.
مثلاً:
$isLoggedIn = true;
if ($isLoggedIn) {
echo "خوش آمدید.";
}
# استفاده از عملگرهای مقایسهای در شرط PHP
یکی از رایجترین کاربردهای شرط، مقایسه دو مقدار است.
مهمترین عملگرهای مقایسهای عبارتاند از:
| عملگر | مفهوم |
|---|---|
== | برابر بودن مقدار |
=== | برابر بودن مقدار و نوع |
!= | نابرابر بودن |
!== | نابرابر بودن مقدار یا نوع |
> | بزرگتر از |
< | کوچکتر از |
>= | بزرگتر یا مساوی |
<= | کوچکتر یا مساوی |
مثلاً:
$age = 25;
if ($age > 18) {
echo "دسترسی مجاز است.";
}
# تفاوت == و === در شرطهای PHP
یکی از نکات بسیار مهم هنگام استفاده از شرطها در PHP، تفاوت بین == و === است.
== مقدارها را به شکل Loose مقایسه میکند.
اما === علاوه بر مقدار، نوع داده را نیز بررسی میکند.
مثلاً:
$value = "10";
var_dump($value == 10);
var_dump($value === 10);
در مقایسه اول PHP مقدار را به شکل Loose مقایسه میکند، اما در مقایسه دوم نوع داده نیز باید یکسان باشد.
در کدهای حرفهای، زمانی که نوع داده اهمیت دارد، استفاده از مقایسه Strict با === و !== معمولاً انتخاب مطمئنتری است.
# استفاده از else در PHP
گاهی میخواهیم اگر شرط برقرار نبود، دستور دیگری اجرا شود.
برای این کار از else استفاده میکنیم:
$age = 16;
if ($age >= 18) {
echo "دسترسی مجاز است.";
} else {
echo "دسترسی مجاز نیست.";
}
اگر شرط if درست باشد، بخش اول اجرا میشود.
اگر شرط درست نباشد، بخش else اجرا خواهد شد.
# مثال کاربردی if و else در PHP
فرض کنید یک فروشگاه اینترنتی داریم و میخواهیم بررسی کنیم محصول موجود است یا خیر:
$stock = 5;
if ($stock > 0) {
echo "محصول موجود است.";
} else {
echo "محصول ناموجود است.";
}
این نوع شرط در سیستمهای فروشگاهی، انبارداری و Marketplace بسیار کاربرد دارد.
# استفاده از elseif در PHP
گاهی بیش از دو حالت داریم.
در چنین شرایطی میتوان از elseif استفاده کرد.
مثلاً میخواهیم بر اساس نمره، وضعیت دانشآموز را مشخص کنیم:
$score = 17;
if ($score >= 18) {
echo "عالی";
} elseif ($score >= 15) {
echo "خوب";
} elseif ($score >= 10) {
echo "قبول";
} else {
echo "مردود";
}
PHP شرطها را از بالا به پایین بررسی میکند.
به محض اینکه یکی از شرطها برقرار باشد، همان بخش اجرا میشود.
# چند elseif در PHP
میتوان چندین elseif در یک ساختار شرطی داشت:
$hour = 14;
if ($hour < 12) {
echo "صبح بخیر";
} elseif ($hour < 17) {
echo "ظهر بخیر";
} elseif ($hour < 21) {
echo "عصر بخیر";
} else {
echo "شب بخیر";
}
با این حال، اگر تعداد حالتها زیاد شود، ممکن است استفاده از switch یا روشهای دیگر خوانایی کد را بهتر کند.
# شرط تو در تو در PHP
گاهی لازم است یک شرط داخل شرط دیگر قرار بگیرد.
به این ساختار Nested If گفته میشود.
مثلاً:
$isLoggedIn = true;
$isAdmin = true;
if ($isLoggedIn) {
if ($isAdmin) {
echo "پنل مدیریت";
}
}
در این مثال ابتدا بررسی میشود که کاربر وارد حساب شده باشد.
سپس بررسی میشود که آیا کاربر Administrator است یا خیر.
# مثال شرط تو در تو در سیستم فروشگاه
$isLoggedIn = true;
$hasPermission = true;
if ($isLoggedIn) {
if ($hasPermission) {
echo "شما اجازه مشاهده این صفحه را دارید.";
} else {
echo "شما مجوز لازم را ندارید.";
}
} else {
echo "ابتدا وارد حساب کاربری شوید.";
}
در پروژههای واقعی بهتر است از تو در تو کردن بیش از حد شرطها جلوگیری شود؛ زیرا Nesting زیاد باعث کاهش خوانایی و دشوار شدن نگهداری کد میشود.
# عملگر AND در شرط PHP
برای زمانی که میخواهیم چند شرط همزمان برقرار باشند، میتوانیم از && استفاده کنیم.
مثلاً:
$age = 25;
$isVerified = true;
if ($age >= 18 && $isVerified) {
echo "دسترسی مجاز است.";
}
در اینجا هر دو شرط باید درست باشند.
# عملگر OR در شرط PHP
اگر کافی باشد حداقل یکی از شرایط برقرار باشد، از || استفاده میکنیم.
مثلاً:
$isAdmin = false;
$isManager = true;
if ($isAdmin || $isManager) {
echo "دسترسی مدیریتی دارید.";
}
در این مثال اگر یکی از دو مقدار true باشد، شرط برقرار خواهد بود.
# عملگر NOT در PHP
با ! میتوان مقدار منطقی یک Expression را معکوس کرد.
مثلاً:
$isLoggedIn = false;
if (!$isLoggedIn) {
echo "لطفاً وارد حساب خود شوید.";
}
چون $isLoggedIn برابر false است، عبارت !$isLoggedIn برابر true خواهد شد.
# ترکیب چند شرط در PHP
میتوان چند عملگر منطقی را نیز با هم استفاده کرد.
مثلاً:
$age = 25;
$isVerified = true;
$hasSubscription = true;
if ($age >= 18 && $isVerified && $hasSubscription) {
echo "دسترسی به محتوای ویژه فعال است.";
}
این نوع ساختار در سیستمهای اشتراکی، SaaS و پنلهای کاربری بسیار کاربرد دارد.
# پرانتز در شرطهای PHP
وقتی چند عملگر منطقی در یک شرط داریم، استفاده صحیح از پرانتز میتواند خوانایی و نتیجه Expression را مشخصتر کند.
مثلاً:
if (($isAdmin || $isManager) && $isActive) {
echo "Access granted";
}
در این مثال ابتدا مشخص میشود که کاربر Administrator یا Manager باشد و سپس باید حساب او فعال باشد.
# switch در PHP چیست؟
switch یکی دیگر از ساختارهای تصمیمگیری در PHP است.
این ساختار زمانی کاربرد دارد که یک مقدار مشخص داریم و میخواهیم آن را با چند حالت مختلف مقایسه کنیم.
مثلاً:
$status = "pending";
switch ($status) {
case "pending":
echo "در انتظار بررسی";
break;
case "approved":
echo "تأیید شده";
break;
case "rejected":
echo "رد شده";
break;
default:
echo "وضعیت نامشخص";
}
# case در switch
هر حالت داخل switch با case مشخص میشود.
مثلاً:
$role = "admin";
switch ($role) {
case "admin":
echo "مدیر";
break;
case "user":
echo "کاربر";
break;
default:
echo "نامشخص";
}
اگر مقدار $role برابر admin باشد، Case مربوط به آن اجرا میشود.
# break در switch چیست؟
break برای خروج از ساختار switch استفاده میشود.
مثلاً:
switch ($status) {
case "active":
echo "فعال";
break;
case "inactive":
echo "غیرفعال";
break;
}
در صورت نبودن break ممکن است اجرای برنامه وارد Caseهای بعدی شود؛ بنابراین باید رفتار switch و محل استفاده از break را بهدرستی بشناسید.
# default در switch
اگر هیچکدام از Caseها مطابق مقدار موردنظر نباشند، default اجرا میشود.
$status = "unknown";
switch ($status) {
case "active":
echo "فعال";
break;
case "inactive":
echo "غیرفعال";
break;
default:
echo "وضعیت نامعتبر";
}
default مشابه نقش else در بسیاری از سناریوها عمل میکند.
# match در PHP چیست؟
در PHP مدرن، match نیز برای انتخاب بین چند حالت استفاده میشود.
یک مثال ساده:
$status = "approved";
$message = match ($status) {
"pending" => "در انتظار بررسی",
"approved" => "تأیید شده",
"rejected" => "رد شده",
default => "وضعیت نامشخص",
};
echo $message;
match در بسیاری از سناریوها نسبت به switch Syntax کوتاهتر و Expression-Orientedتری ارائه میکند.
# تفاوت switch و match در PHP
هر دو برای انتخاب بین چند حالت کاربرد دارند، اما تفاوتهایی دارند.
switch
switch ($status) {
case "active":
$message = "فعال";
break;
case "inactive":
$message = "غیرفعال";
break;
default:
$message = "نامشخص";
}
match
$message = match ($status) {
"active" => "فعال",
"inactive" => "غیرفعال",
default => "نامشخص",
};
یکی از ویژگیهای مهم match این است که مقدار برمیگرداند و از مقایسه Strict استفاده میکند.
# match در PHP چه زمانی مناسب است؟
وقتی یک Expression را بر اساس چند مقدار مختلف به نتیجهای تبدیل میکنیم، match میتواند انتخاب بسیار خوبی باشد.
مثلاً:
$role = "admin";
$label = match ($role) {
"admin" => "مدیر",
"editor" => "ویرایشگر",
"user" => "کاربر",
default => "کاربر عادی",
};
حالا مقدار $label مشخص میکند نقش کاربر چه عنوانی داشته باشد.
# شرط کوتاه با Ternary Operator در PHP
گاهی یک شرط بسیار ساده داریم.
در این حالت میتوان از Ternary Operator استفاده کرد.
ساختار کلی:
condition ? value_if_true : value_if_false
مثلاً:
$age = 20;
$message = $age >= 18 ? "بزرگسال" : "کمتر از 18 سال";
echo $message;
این کد تقریباً معادل:
if ($age >= 18) {
$message = "بزرگسال";
} else {
$message = "کمتر از 18 سال";
}
است.
# Null Coalescing Operator در PHP
یکی دیگر از Operatorهای کاربردی در PHP، عملگر ?? است.
این عملگر زمانی مفید است که میخواهیم اگر یک مقدار وجود نداشت، مقدار پیشفرضی استفاده کنیم.
مثلاً:
$name = $_GET['name'] ?? 'کاربر';
اگر name وجود داشته باشد، از آن استفاده میشود؛ در غیر این صورت مقدار کاربر قرار میگیرد.
این Syntax در پروژههای Web و هنگام کار با Requestها بسیار کاربردی است.
# شرط با isset در PHP
Function isset() برای بررسی وجود داشتن یک Variable و Null نبودن آن کاربرد دارد.
مثلاً:
$name = "Ali";
if (isset($name)) {
echo "نام مشخص شده است.";
}
یک کاربرد رایجتر:
if (isset($_GET['name'])) {
echo $_GET['name'];
}
البته هنگام نمایش مستقیم داده ورودی کاربر باید به موضوعاتی مانند Validation و Output Escaping نیز توجه کرد.
# شرط با empty در PHP
empty() برای بررسی خالی بودن یک مقدار طبق قواعد PHP استفاده میشود.
مثلاً:
$name = "";
if (empty($name)) {
echo "نام وارد نشده است.";
}
باید توجه داشت که empty() فقط معادل بررسی String خالی نیست و قواعد خاص خود را برای مقادیر مختلف دارد.
بنابراین در کدهای حساس، باید دقیقاً بدانیم چه مقادیری برای PHP Empty محسوب میشوند.
# مثال واقعی: بررسی ورود کاربر
یکی از کاربردهای رایج شرطها، بررسی وضعیت Login است.
$isLoggedIn = true;
if ($isLoggedIn) {
echo "به حساب کاربری خود خوش آمدید.";
} else {
echo "لطفاً ابتدا وارد حساب خود شوید.";
}
در یک پروژه واقعی، این مقدار میتواند از سیستم Authentication دریافت شود.
# مثال واقعی: بررسی سطح دسترسی
فرض کنید سیستم ما سه نوع کاربر دارد:
$role = "admin";
میتوانیم با match عنوان نقش را مشخص کنیم:
$roleTitle = match ($role) {
"admin" => "مدیر",
"editor" => "ویرایشگر",
"user" => "کاربر",
default => "نامشخص",
};
echo $roleTitle;
# مثال واقعی: محاسبه تخفیف
فرض کنید میخواهیم بر اساس مبلغ خرید، تخفیف تعیین کنیم:
$total = 2500000;
if ($total >= 5000000) {
$discount = 20;
} elseif ($total >= 2000000) {
$discount = 10;
} elseif ($total >= 1000000) {
$discount = 5;
} else {
$discount = 0;
}
echo $discount . "%";
این الگو در فروشگاههای اینترنتی و سیستمهای فروش بسیار کاربرد دارد.
# مثال واقعی: وضعیت سفارش
فرض کنید وضعیت سفارش از Database دریافت شده است:
$status = "shipped";
میتوانیم پیام مناسب را نمایش دهیم:
$message = match ($status) {
"pending" => "سفارش در انتظار بررسی است.",
"processing" => "سفارش در حال پردازش است.",
"shipped" => "سفارش ارسال شده است.",
"completed" => "سفارش تکمیل شده است.",
"cancelled" => "سفارش لغو شده است.",
default => "وضعیت سفارش نامعتبر است.",
};
echo $message;
# شرطهای تو در تو یا شرطهای ترکیبی؟
گاهی یک برنامهنویس برای حل یک مسئله، شرطهای زیادی را داخل یکدیگر قرار میدهد.
مثلاً:
if ($isLoggedIn) {
if ($isActive) {
if ($hasPermission) {
echo "Allowed";
}
}
}
این ساختار میتواند بهمرور خوانایی کد را کاهش دهد.
در بسیاری از موارد بهتر است Logic را سادهتر کنیم.
مثلاً:
if ($isLoggedIn && $isActive && $hasPermission) {
echo "Allowed";
}
البته در پروژههای پیچیدهتر ممکن است بهترین راهحل، انتقال بخشی از منطق به یک Function یا Class باشد.
# نکات مهم هنگام استفاده از شرطها در PHP
1. شرطهای بسیار طولانی ننویسید
مثلاً شرطی مانند:
if ($a && $b && $c && $d && $e && $f) {
// ...
}
ممکن است خوانایی کد را کاهش دهد.
در چنین شرایطی بهتر است منطق را به بخشهای کوچکتر تقسیم کنید.
2. از Nesting بیش از حد جلوگیری کنید
شرطهای تو در توی زیاد معمولاً نشانه این هستند که میتوان Logic برنامه را بهتر ساختاردهی کرد.
3. مقایسه Strict را بشناسید
در شرایطی که Type اهمیت دارد، تفاوت == و === را جدی بگیرید.
4. ورودی کاربر را مستقیماً قابل اعتماد فرض نکنید
مثلاً:
$age = $_GET['age'] ?? null;
بهتنهایی به این معنی نیست که $age یک عدد معتبر است.
ورودی کاربر باید Validate شود.
5. شرطها را قابل خواندن نگه دارید
کدی که برای برنامهنویس دیگر قابل فهم باشد، در پروژههای بزرگ ارزش بسیار بیشتری دارد.
# اشتباهات رایج در شرطهای PHP
استفاده نادرست از =
توجه کنید که:
=
برای Assignment است، نه مقایسه.
در حالی که:
==
و:
===
برای مقایسه استفاده میشوند.
فراموش کردن break در switch
در switch باید رفتار break را بهخوبی بشناسید.
استفاده بیش از حد از ternary
Ternary برای شرطهای کوتاه مناسب است.
اما تبدیل Logic پیچیده به یک خط طولانی، خوانایی کد را کاهش میدهد.
مثلاً بهتر است بهجای یک Ternary بسیار طولانی، از if/else استفاده کنیم.
# تفاوت if، switch و match در PHP
| ساختار | کاربرد مناسب |
|---|---|
if | یک شرط یا شرایط پیچیده |
if / elseif / else | چند شرط متفاوت |
switch | مقایسه یک مقدار با چند Case |
match | انتخاب یک نتیجه بر اساس چند مقدار |
ternary | شرطهای کوتاه |
?? | مقدار پیشفرض برای داده Null یا تعریفنشده |
هیچکدام همیشه بهترین گزینه نیستند.
انتخاب ساختار مناسب به نوع مسئله و پیچیدگی Logic بستگی دارد.
# جمعبندی
شرطها یکی از مهمترین مفاهیم پایه در PHP هستند و تقریباً در تمام پروژههای واقعی مورد استفاده قرار میگیرند.
با استفاده از شرطها میتوانیم کاری کنیم که برنامه بر اساس وضعیت دادهها تصمیم بگیرد.
مهمترین ساختارهایی که در این آموزش یاد گرفتیم عبارتاند از:
ifelseelseifswitchmatch- Ternary Operator
- Null Coalescing Operator
- عملگرهای مقایسهای
- عملگرهای منطقی
- Nested Conditions
برای شروع یادگیری PHP، ابتدا باید با if و else کاملاً مسلط شوید و سپس به سراغ elseif، عملگرهای منطقی و switch و match بروید.
بعد از یادگیری شرطها، یکی از مهمترین مباحث بعدی حلقهها در PHP است؛ زیرا حلقهها به شما اجازه میدهند یک عملیات را چندین بار روی دادهها اجرا کنید.
# سوالات متداول شرطها در PHP
شرط در PHP چیست؟
شرط در PHP به برنامه اجازه میدهد بر اساس درست یا غلط بودن یک Expression، تصمیم بگیرد کدام بخش از کد اجرا شود.
سادهترین شرط در PHP چیست؟
سادهترین ساختار شرطی PHP با if نوشته میشود:
if ($age >= 18) {
echo "Adult";
}
تفاوت if و else در PHP چیست؟
if زمانی اجرا میشود که شرط برقرار باشد و else زمانی اجرا میشود که شرط if برقرار نباشد.
elseif در PHP چیست؟
elseif برای بررسی شرایط اضافی زمانی استفاده میشود که شرطهای قبلی برقرار نبودهاند.
switch در PHP چیست؟
switch برای بررسی یک مقدار در برابر چند Case مختلف استفاده میشود.
match در PHP چیست؟
match یک Expression در PHP است که بر اساس مقدار ورودی، یک نتیجه مشخص را انتخاب و برمیگرداند.
تفاوت switch و match در PHP چیست؟
match Syntax Expression-Oriented دارد، مقدار برمیگرداند و از مقایسه Strict استفاده میکند؛ در حالی که switch ساختار قدیمیتر و Statement-Oriented دارد.
تفاوت == و === در PHP چیست؟
== مقایسه Loose انجام میدهد، اما === مقدار و نوع داده را بهصورت Strict مقایسه میکند.
Ternary Operator در PHP چیست؟
Ternary یک روش کوتاه برای نوشتن شرطهای ساده است:
$result = $condition ? $value1 : $value2;
عملگر && در PHP چه کاربردی دارد؟
&& برای زمانی استفاده میشود که بخواهیم چند شرط همزمان برقرار باشند.
عملگر || در PHP چه کاربردی دارد؟
|| زمانی استفاده میشود که برقرار بودن حداقل یکی از چند شرط کافی باشد.
# مقالات مرتبط
برای ادامه مسیر یادگیری PHP، پیشنهاد میکنیم این مقالات را نیز مطالعه کنید:
- PHP چیست و چه کاربردی دارد؟
- آموزش PHP از صفر
- ساختار Syntax در PHP
- متغیرها در PHP
- انواع داده در PHP
- حلقهها در PHP
- توابع در PHP
- آرایهها در PHP
- رشتهها در PHP
- کار با JSON در PHP
- Exception در PHP
- OOP در PHP
# مسیر پیشنهادی یادگیری
PHP چیست؟
↓
آموزش PHP از صفر
↓
Syntax در PHP
↓
متغیرها در PHP
↓
انواع داده در PHP
↓
شرطها در PHP
↓
حلقهها در PHP
↓
توابع در PHP
↓
آرایهها در PHP
↓
رشتهها در PHP
↓
تاریخ و زمان در PHP
↓
JSON در PHP
↓
کار با فایل
↓
Exception
↓
Namespace
↓
Composer
↓
OOP





