عبارات Switch وMatch
استخدموا switch وmatch في PHP 8 للمنطق متعدد الفروع.
عبارات Switch وMatch درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.
switch مقابل سلاسل if
عندما يكون لديك العديد من الفروع المستندة إلى قيمة متغير واحد، تكون switch أوضح من سلسلة if/elseif طويلة.
قدمت PHP 8 العبارة match كبديل حديث وصارم.
أساسيات عبارة switch
تقيّم switch تعبيرها مرة واحدة، ثم تنفّذ كتلة الحالة المطابقة:
<?php
$day = 'Monday';
switch ($day) {
case 'Monday':
echo 'Start of work week';
break;
case 'Friday':
echo 'Almost weekend';
break;
default:
echo 'Midweek';
}سلوك الانتقال التلقائي بين الحالات
من دون break، ينتقل التنفيذ تلقائيًا إلى الحالة التالية — وهي حيلة مفيدة لتجميع الحالات عمدًا:
<?php
$status = 2;
switch ($status) {
case 1:
case 2:
case 3:
echo 'In progress'; // runs for 1, 2, or 3
break;
case 4:
echo 'Done';
break;
}تستخدم switch مقارنة غير صارمة
تستخدم switch العامل == (المقارنة غير الصارمة) داخليًا — وقد يؤدي ذلك إلى تطابقات مفاجئة:
<?php
$val = 0;
switch ($val) {
case 'foo': // 0 == 'foo' in PHP 7!
echo 'match foo';
break;
case 0:
echo 'match zero'; // PHP 8 fixes this
break;
}
// PHP 8: match zero (fixed)
// PHP 7: match foo (bug!)تعبير match في PHP 8
تشبه match عبارة switch، لكنها تستخدم مقارنة صارمة، وتعيد قيمة، ولا تحتاج إلى break:
<?php
$status = 'active';
$label = match($status) {
'active' => 'Currently active',
'inactive' => 'Not active',
'pending' => 'Awaiting activation',
default => 'Unknown status',
};
echo $label; // Currently activematch مع استثناء عدم التطابق
إذا لم يطابق أي ذراع في match ولم يوجد default، فستطرح UnhandledMatchError:
<?php
$code = 99;
try {
$result = match($code) {
200 => 'OK',
404 => 'Not Found',
500 => 'Server Error',
// no default!
};
} catch (\UnhandledMatchError $e) {
echo 'Unhandled match value: ' . $code;
}match مع شروط متعددة
يمكن لذراع match واحد أن يسرد عدة قيم مفصولة بفواصل:
<?php
$lang = 'tr';
$region = match($lang) {
'en', 'en-US', 'en-GB' => 'English',
'tr', 'az' => 'Turkic',
'fr', 'be', 'ca' => 'French-speaking',
default => 'Other',
};
echo $region; // Turkicmatch مع تعبيرات معقدة
يمكن لأسلحة match استخدام تعبيرات عشوائية في الطرف الأيمن:
<?php
$score = 85;
$grade = match(true) {
$score >= 90 => 'A',
$score >= 80 => 'B', // matches
$score >= 70 => 'C',
default => 'F',
};
echo $grade; // Bإعادة القيمة من match
بما أن match تعبير، فيمكن استخدامها في أي موضع يُتوقع فيه وجود قيمة:
<?php
function getHttpMessage(int $code): string {
return match($code) {
200 => 'OK',
201 => 'Created',
400 => 'Bad Request',
401 => 'Unauthorized',
404 => 'Not Found',
default => 'Unknown',
};
}
echo getHttpMessage(404); // Not Foundswitch في سياق return
يمكن استخدام switch داخل دالة لإعادة قيم مختلفة، لكن match أوضح:
<?php
function describe(int $n): string {
switch (true) {
case $n < 0: return 'negative';
case $n === 0: return 'zero';
default: return 'positive';
}
}
echo describe(-5); // negative
echo describe(0); // zero
echo describe(7); // positiveمتى تستخدم switch أو match
إرشادات الاختيار:
- استخدم
matchعندما تحتاج إلى مقارنة صارمة وقيمة معادة (PHP 8 فأحدث) - استخدم
switchلتجميع الحالات عبر الانتقال التلقائي أو عند دعم PHP 7 - كلتاهما أوضح من سلاسل if/elseif الطويلة عند التفرع بناءً على قيم متعددة
تحقق سريع
ماذا يحدث في تعبير match عندما لا يطابق أي ذراع ولا يوجد default؟
مراجعة: switch وmatch
الفروق الأساسية:
switch— مقارنة غير صارمة، وانتقال تلقائي بين الحالات، ومتاحة منذ PHP 4match— مقارنة صارمة، ولا انتقال تلقائي، وتعيد قيمة، ومتاحة منذ PHP 8- تطرح match الخطأ
UnhandledMatchErrorعند عدم وجود default - تقبل أسلحة match عدة قيم مفصولة بفواصل
التالي: حلقتا for وwhile.
الأسئلة الشائعة
هل درس «عبارات Switch وMatch» مجاني؟
نعم — نص درس «عبارات Switch وMatch» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.
ماذا ستتعلم في «عبارات Switch وMatch»؟
استخدموا switch وmatch في PHP 8 للمنطق متعدد الفروع. تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟
لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «عبارات Switch وMatch»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟
نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- if وelseif وelse
- عبارات Switch وMatch
- حلقتا for وwhile
- foreach والتحكم في الحلقات