انتقل إلى محتوى الدرس
الدرس 23
دورة PHP

تعبير المطابقة الحديث match في PHP 8PHP Match Expression

تعلّم تعبير المطابقة الحديث match في PHP 8 بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
1
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

قدم إصدار PHP 8.0 تعبير المطابقة الحديث match لحل أكبر ثلاث مشاكل في جملة switch التقليدية: المقارنة المرنة، والانزلاق غير المقصود، وكثرة الأسطر التكرارية.

  • يقارن match القيم بصرامة تامة باستخدام === بدلاً من المقارنة المرنة ==.
  • يُرجع كل مسار (Arm) قيمة مباشرة عبر السهم => ولا ينزلق أبداً للمسار التالي؛ فلا حاجة ولا مكان للأمر break;.
  • يُعد match تعبيراً برمجياً حقيقياً (Expression) يمكن إسناد نتيجته مباشرة إلى متغير أو طباعتها عبر echo.

يتم تقييم كتلة match ($httpCode) { ... }; بالكامل لإرجاع القيمة "OK" وإسنادها مباشرة إلى $statusText.

مخطط توضيحي: مختبر مقارنة match الصارم بـ switch المرن في PHP 8
PHP
<?php

$httpCode = 200;

$statusText = match ($httpCode) {
    200 => "OK",
    301 => "Moved Permanently",
    404 => "Not Found",
    500 => "Internal Server Error",
    default => "Unknown HTTP Code",
};

echo "$httpCode: $statusText\n";

يتكون كل مسار (Arm) في تعبير match من قيمة شرط أو أكثر، يليها سهم مزدوج =>، ثم تعبير واحد يتم إرجاع نتيجته مباشرة.

  • افصل بين كل مسار والذي يليه بفاصلة ,؛ ويُنصح بوضع فاصلة ختامية بعد المسار الأخير وفق أسلوب PHP الحديث.
  • يمكنك استخدام match مباشرة داخل العمليات الحسابية أو جمل الطباعة echo.
  • يجب أن يكون الطرف الأيمن بعد السهم => تعبيراً واحداً يُرجع قيمة، وليس كتلة أوامر متعددة الأسطر.

يُرجع التعبير match ($tier) العدد العشري 0.20 مباشرة داخل $discountRate ليُستخدم في حساب السعر النهائي.

PHP
<?php
$tier = "gold";
$basePrice = 100.00;
$discountRate = match ($tier) {
    "silver" => 0.10,
    "gold" => 0.20,
    "platinum" => 0.30,
    default => 0.00,
};
$finalPrice = $basePrice * (1 - $discountRate);
echo "Tier: $tier | Final Price: $finalPrice\n";

على عكس switch، يجري match دائماً مقارنة تطابق صارمة (===)، مما يمنع أخطاء الخلط التلقائي بين النصوص والأعداد والقيم المنطقية.

  • في match، النص "200" لن يتطابق أبداً مع المسار الرقمي 200 => ....
  • العدد الصحيح 0 لن يتطابق مع false أو null أو النص الفارغ "".
  • تعمل المقارنة الصارمة تلقائياً في match حتى لو لم يتم كتابة declare(strict_types=1).

لأن $rawInput نص "1"، يتخطى match العدد الصحيح 1 والقيمة المنطقية true ويطابق فقط المسار النصي "1".

PHP
<?php

$rawInput = "1";

$result = match ($rawInput) {
    1 => "Matched integer 1",
    true => "Matched boolean true",
    "1" => "Matched string '1' strictly",
    default => "Other",
};

echo "$result\n";

بدلاً من تكديس أسطر case: الفارغة كما في switch، يتيح لك match دمج عدة قيم في مسار واحد مفصولة بفواصل.

  • اكتب 200, 201, 204 => "Success" لمطابقة أي قيمة منها في سطر واحد أنيق.
  • يقيّم PHP الشروط المفصولة بفواصل من اليسار إلى اليمين ويتوقف فور تطابق أحدها.
  • يمكنك أيضاً استخدام الصيغة match (true) لبناء جداول فحص النطاقات بأسلوب مختصر.

تتطابق القيمة 204 مع القيمة الثالثة في المسار الأول المدمج بالفاصلة 200, 201, 204 => "2xx Success".

مخطط تدفق التنفيذ العملي لقسم دمج عدة شروط بمسار واحد في لغة PHP
PHP
<?php

$statusCode = 204;

$category = match ($statusCode) {
    200, 201, 204 => "2xx Success",
    301, 302, 307, 308 => "3xx Redirection",
    400, 401, 403, 404 => "4xx Client Error",
    default => "5xx or Custom Status",
};

echo "HTTP $statusCode -> $category\n";

على عكس switch، يشترط تعبير match الشمولية الكاملة (Exhaustiveness): فإذا لم يتطابق أي مسار ولم يوجد مسار default، يطلق PHP خطأ UnhandledMatchError فوراً!

  • بما أن match ملزم بإرجاع قيمة، فلا يمكنه التخطي بصمت عند عدم تطابق أي مسار.
  • إطلاق خطأ UnhandledMatchError يكشف القيم غير المتوقعة فوراً بدلاً من تمرير بيانات ناقصة بصمت.
  • أضف دائماً المسار الافتراضي default => ... عندما تكون القيم المدخلة مفتوحة الاحتمالات.

تضمين المسار default => "127.0.0.1" يضمن حصول $dbHost دائماً على عنوان صالح دون المخاطرة بحدوث UnhandledMatchError.

PHP
<?php

$env = "staging";

$dbHost = match ($env) {
    "production" => "db.prod.internal",
    "staging", "testing" => "db.stage.internal",
    default => "127.0.0.1",
};

echo "Connected host: $dbHost\n";

في تطوير PHP 8.3 / 8.4 الحديث، يُعد match الخيار الافتراضي لتحويل القيم وربطها، بينما تبقى switch مفيدة فقط لكتل الأوامر الإجرائية متعددة الأسطر.

  • فضّل match دائماً عند تحويل قيمة مدخلة أو شرط match (true) إلى قيمة مخرجة.
  • تذكر دائماً الفاصلة المنقوطة }; في نهاية تعبير match.
  • لا تضع أبداً الأمر break; داخل مسارات match.

يُقيّم match (true) كل مسار منطقي بالترتيب الصارم ويُرجع "Gold Mastery" للدرجة 92.

وجه المقارنةتعبير match الحديث (PHP 8+)جملة switch التقليدية
معامل المقارنةتطابق صارم في القيمة والنوع (===)مساواة مرنة (==)
إرجاع قيمة مباشرةنعم (تعبير يُسند لمتغير)لا (كتلة أوامر إجرائية)
السقوط التلقائيلا يسقط أبداً (لا يحتاج break)يسقط للحالة التالية ما لم تكتب break;
تجميع عدة قيممفصولة بفاصلة: 1, 2 => ...عناوين مكدسة: case 1: case 2:
غياب التطابق وdefaultيرمي خطأ UnhandledMatchErrorيتجاهل التنفيذ بصمت
PHP
<?php

$score = 92;

$badge = match (true) {
    $score >= 90 => "Gold Mastery",
    $score >= 75 => "Silver Proficiency",
    $score >= 60 => "Bronze Pass",
    default => "Needs Practice",
};

echo "Score $score -> $badge\n";
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

في تطوير PHP 8.3 / 8.4 الحديث، يُعد match الخيار الافتراضي لتحويل القيم وربطها، بينما تبقى switch مفيدة فقط لكتل الأوامر الإجرائية متعددة الأسطر. فضّل match دائماً عند تحويل قيمة مدخلة أو شرط match (true) إلى قيمة مخرجة. تذكر دائماً الفاصلة المنقوطة }; في نهاية تعبير match. لا تضع أبداً الأمر break; داخل مسارات match.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Match Expression تعبير match
تعلّم تعبير المطابقة الحديث match في PHP 8 بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
للمراجعة
02 Why PHP 8 Introduced match لماذا ظهرت بنية match الحديثة
المفهوم الأساسي لقسم لماذا ظهرت بنية match الحديثة في لغة PHP الحديثة.
للمراجعة
03 Match Expression Return Value إرجاع القيمة مباشرة من match
الصياغة البرمجية والتطبيق العملي المباشر لقسم إرجاع القيمة مباشرة من match.
للمراجعة
04 Strict Identity Check in match المقارنة الصارمة للنوع والقيمة
قواعد التحقق وأفضل الممارسات القياسية الخاصة بقسم المقارنة الصارمة للنوع والقيمة.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 PHP PHP
PHP: Hypertext Preprocessor
لغة البرمجة النصية على جانب الخادم لبناء تطبيقات الويب الديناميكية وواجهات البرمجة.
للمراجعة
02 CLI CLI
Command-Line Interface
واجهة سطر الأوامر التي تتيح تشغيل ملفات PHP مباشرة عبر الطرفية.
للمراجعة
03 FPM FPM
FastCGI Process Manager
مدير عمليات FastCGI عالي الأداء لمعالجة طلبات خادم الويب في PHP.
للمراجعة
04 HTML HTML
HyperText Markup Language
لغة الترميز القياسية التي يولدها محرك PHP ويرسلها إلى متصفح العميل بعد التنفيذ.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم لماذا ظهرت بنية match الحديثة للتحقق من المخرجات.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم إرجاع القيمة مباشرة من match وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 1أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

أي معامل مقارنة يستخدمه تعبير match في PHP 8 عند مقارنة القيمة بكل مسار؟

يستخدم match دائماً التطابق الصارم === بغض النظر عن إعداد strict_types.

02

ماذا يحدث إذا لم يتطابق أي مسار في تعبير match ولم يتم توفير المسار الافتراضي default؟

يجب أن يكون match شاملاً ولذلك يطلق خطأ UnhandledMatchError عند عدم تطابق أي مسار.

03

كيف تدمج عدة قيم في مسار واحد داخل تعبير match؟

يدعم match فصل عدة شروط بفواصل في نفس المسار قبل السهم =>.

04

هل يحتاج مسار تعبير match إلى الأمر break; لمنع الانزلاق للمسار التالي؟

كل مسار في match يقيم تعبيراً واحداً ويرجع نتيجته فوراً دون انزلاق.

05

ماذا يرجع التعبير match ("200") { 200 => "Int", "200" => "String", default => "Other" } ؟

لأن match يستخدم ===، يتخطى النص "200" العدد 200 ويطابق النص "200".

06

لماذا يجب وضع فاصلة منقوطة }; بعد قوس الإغلاق عند إسناد تعبير match إلى متغير؟

كل جملة إسناد في PHP يجب أن تنتهي بفاصلة منقوطة.

07

كيف يمكنك استخدام تعبير match لتقييم شروط النطاقات مثل $score >= 90؟

المطابقة مع القيمة المنطقية true تنفذ أول مسار تكون نتيجة شرطه true.

08

ما الرمز الذي يفصل بين الشرط وقيمة الإرجاع داخل مسار تعبير match؟

تستخدم مسارات match صيغة الشرط ثم السهم المزدوج => ثم القيمة.